我需要使用一种方法将整数转换为罗马数字。后来,我必须使用该程序以罗马数字写出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));
}
}
问题内容: 这是user2486所说的之后的当前代码。 我在使用ns时遇到此错误:UnboundLocalError:分配前引用了本地变量’ns’ 问题答案: 考虑一下此附加的伪代码和提示(其中一些是有效的Python,一些不是有效的,但有注释)。
我正在尝试将罗马数字转换为阿拉伯数字。我取一个字符串并运行一个循环来检查每个字符的值。所以'M'将返回1000等。在罗马数字中,如果一个数字小于下一个,那么您需要减去它。所以'XL'或'10 50'将是40。这就是为什么我在for循环中有一个if语句,我在其中检查下一个字符并返回其值。稍后我将进行算术运算,但现在我只是尝试返回值。 我的问题是,它总是返回最后一个字符值两次。不管我输入2个字符还是1
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 100
罗马数字包含以下七种字符:I,V,X,L,C,D和M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,
问题内容: 将转换为的快速方法是什么? 例如 问题答案: 看看ByteBuffer类。 设置字节顺序保证了,,和。 或者,你可以手动执行以下操作: 该班是专为尽管这样的脏手任务。实际上,私有定义了以下辅助方法: