Нужен код программы для перевода чисел с десятичной системы счисления в римские числа - 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, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д