leetcode12Integer to Roman
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999
之前那个题的姊妹篇,首先强调!没什么难的,,,把罗马数字的规则搞搞清楚就行了,,,我写的代码写的太多了,,,全是if,else if各种判断条件,,感觉写的很不好,虽然通过了,,有空去看看别人是怎么写的。。。。具体详细就不描述了,,还是那一老套的东西,,关键搞清楚罗马数字的规则就行了,还是很简单的。
class Solution {
public:
string intToRoman(int num) {
int temp, m, d = 1000, count = 4;
string s;
while (count)
{
temp = num / d;
if (!temp)
{
count--;
d /= 10;
continue;
}
num %= d;
if (d == 1000)
s += string(temp, 'M');
else if (d == 100)
{
if (temp == 9)
s += "CM";
else if (temp > 5 && temp < 9)
s += "D" + string(temp-5, 'C');
else if (temp < 5 && temp > 3)
s += string(5-temp, 'C') + "D";
else if (temp == 5)
s += "D";
else
s += string(temp, 'C');
}
else if (d == 10)
{
if (temp == 9)
s += string("XC");
else if(temp < 9 && temp > 5)
s += "L" + string(temp-5, 'X');
else if (temp < 5 && temp > 3)
s += string(5-temp, 'X') + 'L';
else if (temp == 5)
s += "L";
else
s += string(temp, 'X');
}
else if (d == 1)
{
if (temp == 9)
s += "IX";
else if (temp > 5 && temp < 9)
s += "V" + string(temp-5, 'I');
else if(temp == 5)
s += "V";
else if (temp == 4)
s += "IV";
else if (temp < 4)
s += string(temp-0, 'I');
}
count--;
d /= 10;
}
return s;
}
};