Нужен код программы для перевода чисел с десятичной системы счисления в римские числа - C (СИ)
Формулировка задачи:
нужен код простой программы с проверками на ANSI C, которая переводит числа из десятичной системы счисления в римские числа.
Решение задачи: «Нужен код программы для перевода чисел с десятичной системы счисления в римские числа»
textual
Листинг программы
#include <stdio.h> char res[20] = {'\0'}; void made_rom(int count, char litera); char * end_str(void); int main(void) { int div[8] = {1,1,5,10,50,100,500,1000}; char rom[8] = {' ','I','V','X','L','C','D','M'}; int ab, x, y, i; ab = 2949; // Переводимое число в арабском виде. //в данном случае, должно быть меньше 3999, т.к. asci буков не хватает for(i=7; i>0; i--) { x = ab/div[i]; y = ab % div[i]; if(x) { if(i==5 && x==4) // for 400 { made_rom(1,'C'); made_rom(1,'D'); ab = y; continue; } else if(i==3 && x==4) // for 40 { made_rom(1,'X'); made_rom(1,'L'); ab = y; continue; } else if(i==1 && x==4) // for 4 { made_rom(1,'I'); made_rom(1,'V'); break; } if(i==6 && y >=400) // for 900 { made_rom(1,'C'); made_rom(1,'M'); ab = y - 400; continue; } else if(i==4 && y >=40) // for 90 { made_rom(1,'X'); made_rom(1,'C'); ab = y - 40; continue; } else if(i==2 && y ==4) // for 9 { made_rom(1,'I'); made_rom(1,'X'); break; } made_rom(x,rom[i]); } ab = y; } printf("%s", res); return 0; } //####################### void made_rom(int count, char litera) { char *ptr; ptr = end_str(); while(count) { *ptr = litera; ptr++; count--; } } //###################### char * end_str(void) { char *ptr_res; ptr_res = res; while(*ptr_res) ptr_res++; return ptr_res; }
Объяснение кода листинга программы
- В программе присутствует функция
made_rom
, которая принимает два аргумента: целое числоcount
и символlitera
. Эта функция отвечает за преобразование чисел в римскую систему счисления. - Функция
end_str
возвращает указатель на последний символ в строкеres
. Она используется для добавления символов в конец строкиres
в функцииmade_rom
. - В функции
main
определены две массивы:div
иrom
.div
содержит делители для чисел от 1 до 8, аrom
содержит римские символы для этих чисел. - Переводимое число в арабском виде хранится в переменной
ab
. В данном случае, это число 2949. - В цикле
for
происходит деление числаab
на делители из массиваdiv
и сохранение остатка в переменнойy
. - Если остаток от деления больше или равен 4, то выполняется блок кода, который добавляет соответствующие римские символы в строку
res
. - Если остаток от деления меньше 4, то выполняется другой блок кода, который добавляет римские символы в строку
res
. - После выполнения всех блоков кода, в строку
res
добавляется символ пробела. - В конце программы, с помощью функции
printf
, выводится значение переменнойres
, которое представляет собой римское число для исходного числа. - Возвращаемое значение функции
main
равно 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д