Genie
написал 27 июля 2004 года в 21:36 (827 просмотров)
Ведет себя
как мужчина; открыл 40 тем в форуме, оставил 4758 комментариев на сайте.
…препод дал задачку: написать программу для перевода из десятичной записи в римскую.
все написали именно что он просил, кроме.. ну, понятно ;)
Программка несколко некорректна, в том плане, что введены «римские числа» T (5000) и 1 (10000) — просто для удобства представления чисел до 10000.
#include #define fNone 0 #define fDec 1 #define fRom 2 #define fQuit 3 char romal1[]="OIVXLCDMT1", *romal2[]={"","1","11","111","12","2","21","211","2111","13"}, buffer[80], flag=fNone, len; int number; int try_decimal(void) { char *ptr=buffer; if(*buffer=='0') return flag=fDec*(!buffer[1]); while((*ptr>='0')&&(*ptr<='9')) ptr++; return flag=fDec*((!*ptr)&&((len=(char)(ptr-buffer))>0)&&(len<5)); } int is_romal(char**ptr, char*ptr1, char*ptr2) { char *ptr3=*ptr; while(*ptr2) if(*(ptr3++)!=ptr1[*(ptr2++)-'1']) return 0; *ptr=ptr3; return 1; } int try_romal(void) { char *ptr=buffer, pos=4, tryed; number=0; if(*(int*)buffer=='O') return flag=fRom; while(pos--) { tryed=10; while((tryed--)&& !is_romal(&ptr, &romal1[pos*2+1], romal2[tryed])); number=number*10+tryed; } return flag=fRom*(!*ptr); } void convert(void) { char *ptr1=buffer, *ptr2; switch(flag) { case fDec: printf("Десятичное '%s' = римскому '",buffer); if((len==1)&&(*ptr1=='0')) { putchar('O'); break; } while(len--) { ptr2=romal2[*ptr1++-'0']; while(*ptr2) putchar(romal1[len*2+(*ptr2++)-'0']); } break; case fRom: printf("Римское '%s' = десятичному '%d",buffer,number); break; } printf("'\n"); } void main(void) { printf( "Программа для перевода десятичных чисел в римские и обратно.\n" "Для выхода нажмите Ctrl-C.\n\n"); do { printf("Ведите число:"); scanf("%s",buffer); if(!try_decimal()&&!try_romal()) printf("Это ни десятичное, ни римское число!\n"); else convert(); }while(flag!=3); }
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.