FCC--Roman Numeral Converter(羅馬數字的轉換)
阿新 • • 發佈:2019-01-10
將給定的數字轉換成羅馬數字。
演算法思路:1,將數字的每一位數字提出
2,根據數字的位置和值賦予相對的羅馬數字
3,將獲得的羅馬數字進行拼接
function convert(num) { var sig = 0,ten = 0,hundred = 0,thousand = 0; var str = ''; sig = num % 10; if(num >= 10) ten = Math.floor(num / 10 % 10); if(num >= 100) hundred = Math.floor(num / 100 % 10); if(num >= 1000) thousand = Math.floor(num / 1000); var count = { thousand : thousand, hundred : hundred, ten: ten,sig : sig };console.log(count); for(var i in count){ switch(i){ case 'thousand': str += jisuan('M',count[i]); break; case 'hundred': str += jisuan('C',count[i]); break; case 'ten': str += jisuan('X',count[i]); break; case 'sig': str += jisuan('I',count[i]); break; } } return str; } function jisuan(str,num){ if(num === 0) return ''; if(str == 'M'){ switch(num){ case 1: return 'M'; case 2: return 'MM'; case 3: return 'MMM'; default: return ''; } } if(str == 'C'){ switch(num){ case 1: return 'C'; case 2: return 'CC'; case 3: return 'CCC'; case 4: return 'CD'; case 5: return 'D'; case 6: return 'DC'; case 7: return 'DCC'; case 8: return 'DCCC'; case 9: return 'CM'; default: return ''; } } if(str == 'X'){ switch(num){ case 1: return 'X'; case 2: return 'XX'; case 3: return 'XXX'; case 4: return 'XL'; case 5: return 'L'; case 6: return 'LX'; case 7: return 'LXX'; case 8: return 'LXXX'; case 9: return 'XC'; default: return ''; } } if(str == 'I'){ switch(num){ case 1: return 'I'; case 2: return 'II'; case 3: return 'III'; case 4: return 'IV'; case 5: return 'V'; case 6: return 'VI'; case 7: return 'VII'; case 8: return 'VIII'; case 9: return 'IX'; default: return ''; } } } convert(100);
-----------------------------------------------------------------------------------------------------------------------------------------------------
看到一個非常好的思路,是將1,10,40,50等等分割數輸入到一個數組中,用另一個數組記錄相對應的羅馬字元。
從最大的數字開始遍歷,如果num大於當前數,則減去當前數,繼續進入迴圈。字串則加上對應的羅馬字元。
function convert(num) { var numArr = [1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000]; var strArr = ["I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"]; var result = ""; while (num > 0) { var i = numArr.length; while (i >= 0) { if (num >= numArr[i]) { result += strArr[i]; num -= numArr[i]; } else { i--; } } } return result; } convert(100);
這個解法是目前發現最簡單的。