Public feed
#722038
Привет! =)Теперь твоя очередь мне помогать =)) Я забыла прогу и мне надо ее вспомнить. У нас такое задание - сделать перевод из десятичной в римскую систему исчисления. То есть пользователь вводит десятичное число, а ему на выходе выдают римскую форму записи. Я понимаю как это сделать только с многочисленными if-ами, но это очень долго и нудно. Вопрос в том, как это сделать по крутому. Язык программирования - С (не С++). Можешь отправить программу с комментариями плз на почту: profcorny@inbox.ru. Желательно сегодня. Заранее спасибо =))
//Тот, кто по-настоящему любит одного человека, любит весь мир
#include <stdio.h>
int main()
{
printf("Вас приветствует Мозоль:\n\tпрограмма для перевода из римской системы счисления\n\tв десятичную, как это ни странно\n");
printf("Введите число в десятичной системе счисления: ");
int Number = 0;
scanf("%d", &Number);
//Это константы, определяющие размеры для букавок M, D, C, L, X и V
const int MSize = 1000, DSize = 500, CSize = 100, LSize = 50, XSize = 10, VSize = 5;
//Это сколько каких римских букавок у нас в конце-концов получится
int MCount = 0, DCount = 0, CCount = 0, LCount = 0, XCount = 0, VCount = 0;
while (Number >= MSize) { ++MCount; Number -= MSize; }
while (Number >= DSize) { ++DCount; Number -= DSize; }
while (Number >= CSize) { ++CCount; Number -= CSize; }
while (Number >= LSize) { ++LCount; Number -= LSize; }
while (Number >= XSize) { ++XCount; Number -= XSize; }
while (Number >= VSize) { ++VCount; Number -= VSize; }
//Это мы только что разобрались, сколько в римской системе счисление каких букавок.
//Теперь осталось решить только 1 проблему. Как известно 9 = IX, т.е. I будет стоять перед X
//в некоторых случаях
//Таких кривых чисел всего 2: 4 = IV и 9 = IX. Ну, надо эти случаи обработать
printf("А вот и ваше число, мусье или модам: ");
while (MCount > 0) { printf("M"); --MCount; }
while (DCount > 0) { printf("D"); --DCount; }
while (CCount > 0) { printf("C"); --CCount; }
while (LCount > 0) { printf("L"); --LCount; }
while (XCount > 0) { printf("X"); --XCount; }
//Тупо вывели те букавки, в которых у нас нет сомнений, в нужном количестве
//Теперь обрабатываем наш нереально сложный случай
if (Number == 4) {
printf("I");
if (VCount > 0) printf("X");
else printf("V");
}
//Если это и не 4 и не 4+5=9, то тогда выводим пятерочку, представленную букавкой V
//Понятно, что пятерка на конце может быть только одна
else {
if (VCount > 0) printf("V");
while (Number > 0) { printf("I"); --Number; }
}
return 0;
}