Leetcode12. 整数转罗马数字(C++)
題目描述
羅馬數(shù)字包含以下七種字符:?I,?V,?X,?L,C,D?和?M。
字符 ? ? ? ? ?數(shù)值
I ? ? ? ? ? ? 1
V ? ? ? ? ? ? 5
X ? ? ? ? ? ? 10
L ? ? ? ? ? ? 50
C ? ? ? ? ? ? 100
D ? ? ? ? ? ? 500
M ? ? ? ? ? ? 1000
例如, 羅馬數(shù)字 2 寫做?II?,即為兩個(gè)并列的 1。12 寫做?XII?,即為?X?+?II?。 27 寫做??XXVII, 即為?XX?+?V?+?II?。
通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如 4 不寫做?IIII,而是?IV。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地,數(shù)字 9 表示為?IX。這個(gè)特殊的規(guī)則只適用于以下六種情況:
I?可以放在?V?(5) 和?X?(10) 的左邊,來(lái)表示 4 和 9。
X?可以放在?L?(50) 和?C?(100) 的左邊,來(lái)表示 40 和?90。?
C?可以放在?D?(500) 和?M?(1000) 的左邊,來(lái)表示?400 和?900。
給定一個(gè)整數(shù),將其轉(zhuǎn)為羅馬數(shù)字。輸入確保在 1?到 3999 的范圍內(nèi)。
示例?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.
解題思路
題目規(guī)定,是1-3999四個(gè)數(shù)。
也就是最大就是MMMM,因此,將個(gè)位、十位、百位、千位的數(shù)字分別對(duì)應(yīng)上相應(yīng)的數(shù)字即可。
解題代碼
#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; //}總結(jié)
以上是生活随笔為你收集整理的Leetcode12. 整数转罗马数字(C++)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 天翼云从业认证(2.3)云计算的价值和核
- 下一篇: 天翼云从业认证(3.1)了解天翼云计算产