Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
solution:唯一想说的是罗马数字真蛋疼,对于各位的数字而言,123是一个处理方法,叠加而已,4逆反5,5678是一个情况,9是另一种情况。用switch处理比较方便。
class Solution {
public:
string intToRoman(int num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(num <= 0 || num >= 4000)
return NULL;
string result = "";
int numOf5 = 0;
int numOf1 = 0;
vector<string> roman(7,"");
int i = 0;
roman[0] = "I";
roman[1] = "V";
roman[2] = "X";
roman[3] = "L";
roman[4] = "C";
roman[5] = "D";
roman[6] = "M";
while(num != 0)
{
int temp = num % 10;
string str = "";
switch(temp)
{
case 1:
str = roman[i];
break;
case 2:
str = roman[i] + roman[i];
break;
case 3:
str = roman[i] + roman[i] + roman[i];
break;
case 4:
str = roman[i] + roman[i+1];
break;
case 5:
str = roman[i+1];
break;
case 6:
str = roman[i+1] + roman[i];
break;
case 7:
str = roman[i+1] + roman[i] + roman[i];
break;
case 8:
str = roman[i+1] + roman[i] + roman[i] + roman[i];
break;
case 9:
str = roman[i] + roman[i+2];
break;
}
result = str + result;
i = i + 2;
num = num / 10;
}
return result;
}
};