Genie
написал 27 июля 2004 года в 21:36 (916 просмотров)
Ведет себя
как мужчина; открыл 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 декабря 2023 года в 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
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.
