将数字转换为罗马数字
Convert number to Roman numerals
我在使用转换算法时遇到了一些问题。
这是它工作正常,除非我输入一个整数,如 100、200、300,NNN...
有什么线索吗?
方法代码:
public static String decimalToRomano(int decimal) {
int x = 0;
int cent, dece, unid;
cent = x / 100;
x = decimal % 100;
dece = x / 10;
unid = decimal % 10;
String romano = "";
switch (cent) {
case 1:
romano = romano + "C";
break;
case 2:
romano = romano + "CC";
break;
case 3:
romano = romano + "CCC";
break;
case 4:
romano = romano + "CCCC";
break;
case 5:
romano = romano + "D";
break;
case 6:
romano = romano + "DC";
break;
case 7:
romano = romano + "DCC";
break;
case 8:
romano = romano + "DCCC";
break;
case 9:
romano = romano + "DCCCC";
break;
}
switch (dece) {
case 1:
romano = romano + "X";
break;
case 2:
romano = romano + "XX";
break;
case 3:
romano = romano + "XXX";
break;
case 4:
romano = romano + "XXXX";
break;
case 5:
romano = romano + "L";
break;
case 6:
romano = romano + "LX";
break;
case 7:
romano = romano + "LXX";
break;
case 8:
romano = romano + "LXXX";
break;
case 9:
romano = romano + "LXXXX";
break;
}
switch (unid) {
case 1:
romano = romano + "I";
break;
case 2:
romano = romano + "II";
break;
case 3:
romano = romano + "III";
break;
case 4:
romano = romano + "IIII";
break;
case 5:
romano = romano + "V";
break;
case 6:
romano = romano + "VI";
break;
case 7:
romano = romano + "VII";
break;
case 8:
romano = romano + "VIII";
break;
case 9:
romano = romano + "VIIII";
break;
}
return romano;
}
您将 x
(== 0
) 除以 100
和 10
得到 cent
和 decent
值。
您可能想要除以 decimal
。
此外,我会为您的switches
提供一个0
案例。
你应该改变:
cent = x / 100;
至
cent = decimal / 100;
1) 你的 switch (cent) {
没有切换,因为:
int x = 0;
cent = x / 100;
x == 0
所以总是 cent == 0
2) x = decimal % 100;
和 unid = decimal % 10;
可以 return 0 并且没有 case(0)
public static String toRoman(int value) {
String[] singles = new String[] { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
String[] tens = new String[] { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
String[] hundreds = new String[] { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
String[] thousands = new String[] { "", "M", "MM", "MMM" };
return thousands[value / 1000] + hundreds[value % 1000 / 100] + tens[value % 100 / 10] + singles[value % 10];
}
我在使用转换算法时遇到了一些问题。 这是它工作正常,除非我输入一个整数,如 100、200、300,NNN... 有什么线索吗?
方法代码:
public static String decimalToRomano(int decimal) {
int x = 0;
int cent, dece, unid;
cent = x / 100;
x = decimal % 100;
dece = x / 10;
unid = decimal % 10;
String romano = "";
switch (cent) {
case 1:
romano = romano + "C";
break;
case 2:
romano = romano + "CC";
break;
case 3:
romano = romano + "CCC";
break;
case 4:
romano = romano + "CCCC";
break;
case 5:
romano = romano + "D";
break;
case 6:
romano = romano + "DC";
break;
case 7:
romano = romano + "DCC";
break;
case 8:
romano = romano + "DCCC";
break;
case 9:
romano = romano + "DCCCC";
break;
}
switch (dece) {
case 1:
romano = romano + "X";
break;
case 2:
romano = romano + "XX";
break;
case 3:
romano = romano + "XXX";
break;
case 4:
romano = romano + "XXXX";
break;
case 5:
romano = romano + "L";
break;
case 6:
romano = romano + "LX";
break;
case 7:
romano = romano + "LXX";
break;
case 8:
romano = romano + "LXXX";
break;
case 9:
romano = romano + "LXXXX";
break;
}
switch (unid) {
case 1:
romano = romano + "I";
break;
case 2:
romano = romano + "II";
break;
case 3:
romano = romano + "III";
break;
case 4:
romano = romano + "IIII";
break;
case 5:
romano = romano + "V";
break;
case 6:
romano = romano + "VI";
break;
case 7:
romano = romano + "VII";
break;
case 8:
romano = romano + "VIII";
break;
case 9:
romano = romano + "VIIII";
break;
}
return romano;
}
您将 x
(== 0
) 除以 100
和 10
得到 cent
和 decent
值。
您可能想要除以 decimal
。
此外,我会为您的switches
提供一个0
案例。
你应该改变:
cent = x / 100;
至
cent = decimal / 100;
1) 你的 switch (cent) {
没有切换,因为:
int x = 0;
cent = x / 100;
x == 0
所以总是 cent == 0
2) x = decimal % 100;
和 unid = decimal % 10;
可以 return 0 并且没有 case(0)
public static String toRoman(int value) {
String[] singles = new String[] { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
String[] tens = new String[] { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
String[] hundreds = new String[] { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
String[] thousands = new String[] { "", "M", "MM", "MMM" };
return thousands[value / 1000] + hundreds[value % 1000 / 100] + tens[value % 100 / 10] + singles[value % 10];
}