亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將羅馬數字轉換為十進制

將羅馬數字轉換為十進制

LEATH 2019-08-27 17:35:27
將羅馬數字轉換為十進制我設法讓我的代碼將大多數羅馬數字轉換為適當的十進制值。但它不適用于某些特殊情況。示例:XCIX= 99但我的代碼打印出來109。這是我的代碼。public static int romanConvert(String roman){     int decimal = 0;     String romanNumeral = roman.toUpperCase();     for(int x = 0;x<romanNumeral.length();x++)     {         char convertToDecimal = roman.charAt(x);         switch (convertToDecimal)         {         case 'M':             decimal += 1000;             break;         case 'D':             decimal += 500;             break;         case 'C':             decimal += 100;             break;         case 'L':             decimal += 50;             break;         case 'X':             decimal += 10;             break;         case 'V':             decimal += 5;             break;         case 'I':             decimal += 1;             break;         }     }     if (romanNumeral.contains("IV"))     {         decimal-=2;     }     if (romanNumeral.contains("IX"))     {         decimal-=2;     }     if (romanNumeral.contains("XL"))     {         decimal-=10;     }     if (romanNumeral.contains("XC"))     {         decimal-=10;     }     if (romanNumeral.contains("CD"))     {         decimal-=100;     }     if (romanNumeral.contains("CM"))     {         decimal-=100;     }     return decimal;}
查看完整描述

3 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

如果你反過來走路會很好。

public class RomanToDecimal {
    public static void romanToDecimal(java.lang.String romanNumber) {
        int decimal = 0;
        int lastNumber = 0;
        String romanNumeral = romanNumber.toUpperCase();
        /* operation to be performed on upper cases even if user 
           enters roman values in lower case chars */
        for (int x = romanNumeral.length() - 1; x >= 0 ; x--) {
            char convertToDecimal = romanNumeral.charAt(x);

            switch (convertToDecimal) {
                case 'M':
                    decimal = processDecimal(1000, lastNumber, decimal);
                    lastNumber = 1000;
                    break;

                case 'D':
                    decimal = processDecimal(500, lastNumber, decimal);
                    lastNumber = 500;
                    break;

                case 'C':
                    decimal = processDecimal(100, lastNumber, decimal);
                    lastNumber = 100;
                    break;

                case 'L':
                    decimal = processDecimal(50, lastNumber, decimal);
                    lastNumber = 50;
                    break;

                case 'X':
                    decimal = processDecimal(10, lastNumber, decimal);
                    lastNumber = 10;
                    break;

                case 'V':
                    decimal = processDecimal(5, lastNumber, decimal);
                    lastNumber = 5;
                    break;

                case 'I':
                    decimal = processDecimal(1, lastNumber, decimal);
                    lastNumber = 1;
                    break;
            }
        }
        System.out.println(decimal);
    }

    public static int processDecimal(int decimal, int lastNumber, int lastDecimal) {
        if (lastNumber > decimal) {
            return lastDecimal - decimal;
        } else {
            return lastDecimal + decimal;
        }
    }

    public static void main(java.lang.String args[]) {
        romanToDecimal("XIV");
    }}



查看完整回答
反對 回復 2019-08-27
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

假設哈希看起來像這樣

Hashtable<Character, Integer> ht = new Hashtable<Character, Integer>();
    ht.put('i',1);
    ht.put('x',10);
    ht.put('c',100);
    ht.put('m',1000);
    ht.put('v',5);
    ht.put('l',50);
    ht.put('d',500);

然后邏輯變得非常簡單,從右到左依次為數字

public static int rtoi(String num){       
    int intNum=0;
    int prev = 0;
    for(int i = num.length()-1; i>=0 ; i--)
    {
            int temp = ht.get(num.charAt(i));
            if(temp < prev)
                intNum-=temp;
            else
                intNum+=temp;
            prev = temp;
    }
    return intNum;}


查看完整回答
反對 回復 2019-08-27
  • 3 回答
  • 0 關注
  • 485 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號