Java 罗马数字到整数
我正试图找到最简单的算法来将罗马数字转换为int。我从Rosetta代码中得到了这段代码,但代码中几乎没有什么东西是没有意义的 在下面代码的for循环中,罗马数字是如何迭代的?你能解释一下这里嵌套的for循环是如何工作的吗?或者你有没有更简单的方法来编写这个算法Java 罗马数字到整数,java,Java,我正试图找到最简单的算法来将罗马数字转换为int。我从Rosetta代码中得到了这段代码,但代码中几乎没有什么东西是没有意义的 在下面代码的for循环中,罗马数字是如何迭代的?你能解释一下这里嵌套的for循环是如何工作的吗?或者你有没有更简单的方法来编写这个算法 public class Roman { enum Numeral { I(1), IV(4), V(5), IX(9), X(10), XL(40), L(50), XC(90), C(100), CD(40
public class Roman {
enum Numeral {
I(1), IV(4), V(5), IX(9), X(10), XL(40), L(50), XC(90), C(100), CD(400), D(500), CM(900), M(1000);
int weight;
Numeral(int weight) {
this.weight = weight;
}
};
public static String roman(long n) {
if( n <= 0) {
throw new IllegalArgumentException();
}
StringBuilder buf = new StringBuilder();
final Numeral[] values = Numeral.values();
for (int i = values.length - 1; i >= 0; i--) {
while (n >= values[i].weight) {
buf.append(values[i]);
n -= values[i].weight;
}
}
return buf.toString();
}
public static void test(long n) {
System.out.println(n + " = " + roman(n));
}
public static void main(String[] args) {
test(1999);
test(25);
test(944);
test(0);
}
公共类{
枚举数{
I(1)、IV(4)、V(5)、IX(9)、X(10)、XL(40)、L(50)、XC(90)、C(100)、CD(400)、D(500)、CM(900)、M(1000);
整数权重;
数字(整数重量){
重量=重量;
}
};
公共静态字符串罗马(长n){
如果(n=0;i--){
而(n>=值[i]。重量){
buf.追加(值[i]);
n-=值[i]。重量;
}
}
返回buf.toString();
}
公共静态空隙试验(长n){
System.out.println(n+“=”+roman(n));
}
公共静态void main(字符串[]args){
测试(1999年);
测试(25);
测试(944);
试验(0);
}
罗马文字从最高到最低进行迭代。这很有意义。这是一个应该怎么做的方法,因为你想先提取最大的项目。一旦完成,你想提取第二大的项目,依此类推。提取项目时,它可能适合你当前拥有的数字的0,1,2,3,…倍左。这就是这个循环的意义/目的
while (n >= values[i].weight) {
buf.append(values[i]);
n -= values[i].weight;
}
我认为这是编写这个算法最简单的方法。你只需要掌握这个想法。public int romanToInt(String s){
public int romanToInt(String s) {
int total = 0, currentVal = 0, prevVal = 0;
for(int i=s.length()-1; i>=0; i--) {
switch(s.charAt(i)) {
case 'I' : currentVal = 1; break;
case 'V' : currentVal = 5; break;
case 'X' : currentVal = 10; break;
case 'L' : currentVal = 50; break;
case 'C' : currentVal = 100; break;
case 'D' : currentVal = 500; break;
case 'M' : currentVal = 1000; break;
default: break;
}
total += (currentVal < prevVal) ? -1 * currentVal : currentVal;
prevVal = currentVal;
}
return total;
}
int total=0,currentVal=0,prevVal=0;
对于(int i=s.length()-1;i>=0;i--){
开关(s.charAt(i)){
案例“I”:currentVal=1;中断;
案例“V”:currentVal=5;中断;
案例“X”:currentVal=10;中断;
案例“L”:currentVal=50;中断;
案例“C”:currentVal=100;中断;
案例“D”:currentVal=500;中断;
案例“M”:currentVal=1000;中断;
默认:中断;
}
总计+=(currentVal
权重变量指的是什么?它指的是每个罗马文字/数字的值,例如,对于IV,权重为4。除非您将问题的措辞向后,否则此枚举用于将整数转换为罗马数字,而不是将罗马数字转换为整数。可能重复