[題目] Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.
[中文翻譯] 給定一個整數,將其轉換為羅馬數字。 輸入保證在1到3999的范圍內。
[解題思路] 一開始錯了幾次,然后發現羅馬數字的規則還是挺復雜的。 原本是打算找一下隨著數值增加,對應的羅馬數字變化規律的,似乎不太靠譜。 好在輸入保證在1到3999范圍內,對于每一個進制位上,羅馬數字的展開還是有規則的,所以照著規則寫就好了。 規則見代碼就行,這里就不詳細敘述了。
[C++代碼]
class Solution {public: string intToRoman(int num) { string res; switch (num / 1000) { case 1: res = "M"; break; case 2: res = "MM"; break; case 3: res = "MMM"; break; default: break; } num = num % 1000; switch (num / 100) { case 1: res += "C"; break; case 2: res += "CC"; break; case 3: res += "CCC"; break; case 4: res += "CD"; break; case 5: res += "D"; break; case 6: res += "DC"; break; case 7: res += "DCC"; break; case 8: res += "DCCC"; break; case 9: res += "CM"; break; default: break; } num = num % 100; switch (num / 10) { case 1: res += "X"; break; case 2: res += "XX"; break; case 3: res += "XXX"; break; case 4: res += "XL"; break; case 5: res += "L"; break; case 6: res += "LX"; break; case 7: res += "LXX"; break; case 8: res += "LXXX"; break; case 9: res += "XC"; break; default: break; } num = num % 10; switch (num) { case 1: res += "I"; break; case 2: res += "II"; break; case 3: res += "III"; break; case 4: res += "IV"; break; case 5: res += "V"; break; case 6: res += "VI"; break; case 7: res += "VII"; break; case 8: res += "VIII"; break; case 9: res += "IX"; break; default: break; } return res; }};新聞熱點
疑難解答