Leetcode在線編程 integer-to-roman
題目鏈接
題目描述
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
題意
將給定的數字轉換成羅馬數字[1,3999]
解題思路
羅馬數字通過
基本字符
I :1
V:5
X:10
L:50
C:100
D:500
M:10001)相同的數字連寫、所表示的數等於這些數字相加得到的數、如:Ⅲ=3;
2)小的數字在大的數字的右邊、所表示的數等於這些數字相加得到的數、 如:Ⅷ=8、Ⅻ=12;
3)小的數字、(限於 Ⅰ、X 和 C)在大的數字的左邊、所表示的數等於大數減小數得到的數、如:Ⅳ=4、Ⅸ=9;
4)正常使用時、連寫的數字重複不得超過三次;
5)在一個數的上面畫一條橫線、表示這個數擴大 1000 倍。
剩下來就簡單了,通過數組存儲個位數,十位數,百位數,千位數,便可以了
AC代碼
class Solution {
public:
string intToRoman(int num) {
string tmp;
char one[][10]={"I","II","III","IV","V","VI","VII","VIII","IX"};
char ten[][10]={"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
char hundred[][10]={"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
char thousand[][10]={"M","MM","MMM"};
int cnt = num/1000;
num -= cnt*1000;
if(cnt>=1)
tmp+=thousand[cnt-1];
cnt = num/100;
num -= cnt*100;
if(cnt>=1)
tmp+=hundred[cnt-1];
cnt = num/10;
num -= cnt*10;
if(cnt>=1)
tmp+=ten[cnt-1];
if(num>=1)
tmp+=one[num-1];
return tmp ;
}
};