Leetcode12. 整数转罗马数字(C++)
題目描述
羅馬數字包含以下七種字符:?I,?V,?X,?L,C,D?和?M。
字符 ? ? ? ? ?數值
I ? ? ? ? ? ? 1
V ? ? ? ? ? ? 5
X ? ? ? ? ? ? 10
L ? ? ? ? ? ? 50
C ? ? ? ? ? ? 100
D ? ? ? ? ? ? 500
M ? ? ? ? ? ? 1000
例如, 羅馬數字 2 寫做?II?,即為兩個并列的 1。12 寫做?XII?,即為?X?+?II?。 27 寫做??XXVII, 即為?XX?+?V?+?II?。
通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做?IIII,而是?IV。數字 1 在數字 5 的左邊,所表示的數等于大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為?IX。這個特殊的規則只適用于以下六種情況:
I?可以放在?V?(5) 和?X?(10) 的左邊,來表示 4 和 9。
X?可以放在?L?(50) 和?C?(100) 的左邊,來表示 40 和?90。?
C?可以放在?D?(500) 和?M?(1000) 的左邊,來表示?400 和?900。
給定一個整數,將其轉為羅馬數字。輸入確保在 1?到 3999 的范圍內。
示例?1:
輸入:?3
輸出: "III"
示例?2:
輸入:?4
輸出: "IV"
示例?3:
輸入:?9
輸出: "IX"
示例?4:
輸入:?58
輸出: "LVIII"
解釋: L = 50, V = 5, III = 3.
示例?5:
輸入:?1994
輸出: "MCMXCIV"
解釋: M = 1000, CM = 900, XC = 90, IV = 4.
解題思路
題目規定,是1-3999四個數。
也就是最大就是MMMM,因此,將個位、十位、百位、千位的數字分別對應上相應的數字即可。
解題代碼
#include <iostream> #include <string> using namespace std;class Solution { public:string getNum1000(int num1000) {if(num1000==3){return "MMM";} else if(num1000==2){return "MM";} else if(num1000==1){return "M";} else{return "";}}string getNum100(int num100) {switch (num100) {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 "";}}string getNum10(int num10) {switch (num10) {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 "";}}string getNum1(int num1) {switch (num1) {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 "";}}string intToRoman(int num) {int num1000 = num/1000;int num100 = (num%1000)/100;int num10 = (num%100)/10;int num1 = (num%10);string res;res = getNum1000(num1000) + getNum100(num100)+getNum10(num10)+getNum1(num1);return res;} };//int main(){ // Solution solution; // string string1 = solution.intToRoman(1994); // cout<<string1; // return 0; //}總結
以上是生活随笔為你收集整理的Leetcode12. 整数转罗马数字(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天翼云从业认证(2.3)云计算的价值和核
- 下一篇: 天翼云从业认证(3.1)了解天翼云计算产