Занятие 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 * 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.

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

CC Attribution-Noncommercial 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0