====== Занятие 16.10.13 ====== Рассмотрим следующую задачу: ===== Задача ===== С клавиатуры вводится натуральное число ''n'', меньшее чем 4000. Напечатайте в консоли число ''n'', записанное римскими цифрами. О римских цифрах можно прочитать, например, в [[http://ru.wikipedia.org/wiki/%D0%A0%D0%B8%D0%BC%D1%81%D0%BA%D0%B8%D0%B5_%D1%86%D0%B8%D1%84%D1%80%D1%8B|википедии]]. ===== Решение ===== Создадим новый класс ''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 * d <= n; i++) s = s + I; } else if (n < 5 * d) { s = I + V; } else if (n < 9 * d) { s = V; for (int i = 6; i * d <= n; 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. ;#; [[java:elective|Список занятий]] ;#;