Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
class Solution {
public:
string intToRoman(int num) {
if (num == 0) {
return "";
}
else if (num == 1) {
return "I";
}
else if (num <= 3) {
return intToRoman(num - 1).append("I");
}
else if (num > 3 && num < 5) {
return intToRoman(5-num).append("V");
}
else if (num == 5) {
return "V";
}
else if (num > 5 && num <= 8) {
return intToRoman(num - 1).append("I");
}
else if (num > 8 && num < 10) {
return intToRoman(10 - num).append("X");
}
else if (num == 10) {
return "X";
}
else if (num > 10 && num <= 30) {
return string("X").append(intToRoman(num - 10));
}
else if (num == 40) {
return "XL";
}
else if (num > 30 && num < 50) {
return intToRoman(num / 10 * 10) + intToRoman(num % 10);
}
else if (num == 50) {
return "L";
}
else if (num > 50 && num <= 80) {
return string("L").append(intToRoman(num - 50));
}
else if (num == 90) {
return "XC";
}
else if (num > 80 && num < 100) {
return intToRoman(num / 10 * 10) + intToRoman(num % 10);
}
else if (num == 100) {
return "C";
}
else if (num > 100 && num <= 300) {
return string("C").append(intToRoman(num - 100));
}
else if (num == 400) {
return "CD";
}
else if (num > 300 && num < 500) {
return intToRoman(num / 100 * 100) + intToRoman(num % 100);
}
else if (num == 500) {
return "D";
}
else if (num > 500 && num <= 800) {
return string("D").append(intToRoman(num - 500));
}
else if (num == 900) {
return "CM";
}
else if (num > 800 && num < 1000) {
return intToRoman(num / 100 * 100) + intToRoman(num % 100);
}
else if (num == 1000) {
return "M";
}
else if (num > 1000 && num <= 3000) {
return string("M").append(intToRoman(num - 1000));
}
else {
return intToRoman(num / 1000 * 1000) + intToRoman(num % 1000);
}
}
};