Занятие 16.10.13

Рассмотрим следующую задачу:

Задача

С клавиатуры вводится натуральное число n, меньшее чем 4000. Напечатайте в консоли число n, записанное римскими цифрами.

О римских цифрах можно прочитать, например, в википедии.

Решение

Создадим новый класс RomanNumerals, методы которого нужны для перевода числа в римскую систему счисления. Все поля и методы в данном классе будут статическими.

package com.nsunc.wiki.penname; public class RomanNumerals { /* * Строки, являющиеся записями римских цифр. */ private static String one = "I"; private static String five = "V"; private static String ten = "X"; private static String fifty = "L"; private static String oneHundred = "C"; private static String fiveHundred = "D"; private static String oneThousand = "M"; /* * Общий метод перевода. */ private static String genericConversion(String I, String V, String X, int d, int n) { String s = ""; if (n < 4 * d) { for (int i = 1; i <= n / d; i++) s = s + I; } else if (n < 5 * d) { s = I + V; } else if (n < 6 * d) { s = V; } else if (n < 9 * d) { s = V; for (int i = 6; i <= n / d; i++) s = s + I; } else { s = I + X; } return s; } /* * Сам перевод. */ public static String convert(int n) { return genericConversion(oneHundred, fiveHundred, oneThousand, 100, n % 1000) + genericConversion(ten, fifty, oneHundred, 10, n % 100) + genericConversion(one, five, ten, 1, n % 10); } }

Задание

Предложенное решение работает правильно только для чисел, меньших 1000. (Убедитесь в этом!) Измените метод convert так, чтобы предложенное решение правильно работало для всех чисел, меньших 4000.

Список занятий