Сумма чисел, записанных в римской системе счисления - C (СИ)
Формулировка задачи:
Здравствуйте. Нужно посчитать сумму двух натуральных чисел A и B, записанных в римской системе счисления. Ответ также записать в римской системе счисления. (считывать в две строчки а и б).
M = 1000
D = 500
C = 100
L = 50
X = 10
V = 5
I = 1
Все числа не превышают 2000
Код из других тем с решением пока не понимаю, так что лучше на самом базовом Си
Решение задачи: «Сумма чисел, записанных в римской системе счисления»
textual
Листинг программы
#include<stdio.h> #include<string.h> int proc(char p[], int n,int flag); int main(void) { int i=0,j,x1,x2; char s1[50],s2[50]; scanf("%s",s1); scanf("%s",s2); for(i=1;i<2000;i++) if(proc(s1,i,0)) { x1=i; break;} for(i=1;i<2000;i++) if(proc(s2,i,0)) { x2=i;break;} proc(s2,x1+x2,1); return 0; } int proc(char p[],int n,int flag) { char c[30]=""; int x1,x10,x100,x1000; x1=n%10; n/=10; x10=n%10; n/=10; x100=n%10; n/=10; x1000=n%10; switch(x1000) { case 1: strcat(c,"M"); break; case 2: strcat(c,"MM"); break; case 3: strcat(c,"MMM"); break; } switch(x100) { case 1: strcat(c,"C"); break; case 2: strcat(c,"CC"); break; case 3: strcat(c,"CCC"); break; case 4: strcat(c,"CD"); break; case 5: strcat(c,"D"); break; case 6: strcat(c,"DC"); break; case 7: strcat(c,"DCC"); break; case 8: strcat(c,"DCCC"); break; case 9: strcat(c,"CM"); break; } switch(x10) { case 1: strcat(c,"X"); break; case 2: strcat(c,"XX"); break; case 3: strcat(c,"XXX"); break; case 4: strcat(c,"XL"); break; case 5: strcat(c,"L"); break; case 6: strcat(c,"LX"); break; case 7: strcat(c,"LXX"); break; case 8: strcat(c,"LXXX"); break; case 9: strcat(c,"XC"); break; } switch(x1) { case 1: strcat(c,"I"); break; case 2: strcat(c,"II"); break; case 3: strcat(c,"III"); break; case 4: strcat(c,"IV"); break; case 5: strcat(c,"V"); break; case 6: strcat(c,"VI"); break; case 7: strcat(c,"VII"); break; case 8: strcat(c,"VIII"); break; case 9: strcat(c,"IX"); break; } if(flag) printf("%s\n",c); if(!strcmp(p,c)) return 1; else return 0; }
Объяснение кода листинга программы
Код представлен в виде двух функций: main
и proc
.
main
начинается с инициализации переменныхi
,j
,x1
,x2
и массивовs1
иs2
. Затем происходит чтение двух строк с помощьюscanf
и сохранение их вs1
иs2
. Затем следует два вложенных циклаfor
, которые проходят по всем числам от 1 до 2000. Они ищут числа, которые можно записать в римской системе счисления, используя функциюproc
. Если число найдено, то оно сохраняется в соответствующую переменнуюx1
илиx2
, и циклы прерываются. После этого вызывается функцияproc
с суммойx1+x2
и флаг1
. Эта функция преобразует число в римскую систему счисления и сохраняет результат в строкуc
. Затем она проверяет, совпадает ли входная строкаp
сc
. Если да, то функция возвращает1
, иначе0
. В концеmain
выводит результат на экран.- Функция
proc
принимает три параметра:p
(строка, представляющая число в римской системе счисления),n
(текущее значение числа) иflag
(флаг, который равен1
, если число уже найдено, и0
в противном случае). Сначала функция разбивает число на разряды (сотни, десятки, единицы) и сохраняет их в отдельные переменныеx1000
,x100
,x10
иx1
. Затем она использует вложенныеswitch
для преобразования каждого разряда в римскую систему счисления и добавления соответствующего значения к строкеc
. В конце функция проверяет, совпадает лиp
сc
. Если да, то функция возвращает1
, иначе0
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д