力扣 題目12- 整數轉羅馬數字
阿新 • • 發佈:2022-03-30
題目
題解
1.首先 我們可以發現除了千位數以為都是和三個字母有關係(百位是CDM 十位是XLC 個位是IVX)
由於4和9是組合而來所以 我們寫一個字串 判斷一下當前位數 然後修改和上面一樣(4是第一位和第二位組合 9是第一位和第三位組合)
然後判斷一下數的範圍新增到字串後面即可
2.力扣官方的另一種解發 採用了把羅馬數字和數的位數對應成一張表 然後需要的時候再根據餘數找的做法 具體可以點選這裡
程式碼
#include<iostream> #include<string> using namespace std; //int pow(10, i); //int a = atoi(s.c_str());class Solution { public: string intToRoman(int num) { string real = to_string(num); string Rome = ""; int length= real.size(); for (int i = real.size()-1; i >-1; i--) { int now = real.size() - 1 - i; int num = real[now] - 48;string number; if (i >= 3) { number = "M"; } else if(i >= 2) { number = "CDM"; } else if (i >= 1) { number = "XLC"; }else if (i >= 0) { number = "IVX"; } if (num > 0 && num < 4) { for (int j = 0; j < num; j++) { Rome = Rome + number[0]; } } else if (num == 4) { Rome = Rome + number[0] + number[1]; } else if (num > 4 && num < 9) { Rome = Rome + number[1]; for (int j = 5; j < num; j++) { Rome = Rome + number[0]; } } else if (num == 9) { Rome = Rome + number[0] + number[2]; } } cout << Rome << endl; return Rome; } }; int main() { Solution sol; int num = 27; sol.intToRoman(num); }