Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
思路:刚开始没头绪,因为自己不知道1900到底应该是CMM还是MCM
了解思想后写一遍 zero bug
参考代码:
class Solution {
public:
string intToRoman(int num) {
char str[] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
int div = 1000, digit = 0;
string ans;
for(int i = 6; i>=0 && num; i-=2)
{
digit = num / div;
num %= div;
if(digit)
{
if(digit<=3)
ans.append(digit, str[i]);
else if(digit == 4)
{
ans.append(1, str[i]);
ans.append(1, str[i+1]);
}
else if(digit == 5)
ans.append(1, str[i+1]);
else if(digit <= 8)
{
ans.append(1, str[i+1]);
ans.append(digit-5, str[i]);
}
else if(digit == 9)
{
ans.append(1, str[i]);
ans.append(1, str[i+2]);
}
}
div /= 10;
}
return ans;
}
};