Java将整数转换为罗马数字

我需要使用一种方法将整数转换为罗马数字。后来,我必须使用该程序以罗马数字写出1到3999,这样就可以进行硬编码了。我下面的代码非常简单;它是一个基本的I / O循环,可以在使用getIntegerFromUser我们在课堂上制作的程序包时退出。

当我调用该方法时,是否可以将值赋给字符串,然后将它们添加在一起?

更新:我从教授那里得到了一些伪代码来帮助我,而在我理解他要说的内容的同时,我在使用ifs 时遇到了麻烦。我是否需要很多if语句,以便我的转换器正确处理罗马数字格式,或者有什么方式可以使我更高效地执行此操作?我已经更新了代码以反映我的占位符方法。

我正常运行。这是我最终使用的内容:

public static String IntegerToRomanNumeral(int input) {

if (input < 1 || input > 3999)

return "Invalid Roman Number Value";

String s = "";

while (input >= 1000) {

s += "M";

input -= 1000; }

while (input >= 900) {

s += "CM";

input -= 900;

}

while (input >= 500) {

s += "D";

input -= 500;

}

while (input >= 400) {

s += "CD";

input -= 400;

}

while (input >= 100) {

s += "C";

input -= 100;

}

while (input >= 90) {

s += "XC";

input -= 90;

}

while (input >= 50) {

s += "L";

input -= 50;

}

while (input >= 40) {

s += "XL";

input -= 40;

}

while (input >= 10) {

s += "X";

input -= 10;

}

while (input >= 9) {

s += "IX";

input -= 9;

}

while (input >= 5) {

s += "V";

input -= 5;

}

while (input >= 4) {

s += "IV";

input -= 4;

}

while (input >= 1) {

s += "I";

input -= 1;

}

return s;

}

回答:

使用Java TreeMap和递归的紧凑实现:

import java.util.TreeMap;

public class RomanNumber {

private final static TreeMap<Integer, String> map = new TreeMap<Integer, String>();

static {

map.put(1000, "M");

map.put(900, "CM");

map.put(500, "D");

map.put(400, "CD");

map.put(100, "C");

map.put(90, "XC");

map.put(50, "L");

map.put(40, "XL");

map.put(10, "X");

map.put(9, "IX");

map.put(5, "V");

map.put(4, "IV");

map.put(1, "I");

}

public final static String toRoman(int number) {

int l = map.floorKey(number);

if ( number == l ) {

return map.get(number);

}

return map.get(l) + toRoman(number-l);

}

}

测试:

public void testRomanConversion() {

for (int i = 1; i<= 100; i++) {

System.out.println(i+"\t =\t "+RomanNumber.toRoman(i));

}

}

以上是 Java将整数转换为罗马数字 的全部内容, 来源链接: utcz.com/qa/420020.html

回到顶部