//Тот, кто по-настоящему любит одного человека, любит весь мир #include 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; }