Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字1 5 10 50 100 500 1000
I V X L C D M
1~3 III
4 IV 是1,5
6~8 VI是5+几个1
9 是本位和高位的组合 9 IV, 90 XC, 900 CM
3999 / 3999 test cases passed.
Runtime: 388 ms
string intToRoman(int num) {
char symbol[] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
int scale = 1000;
int n = num;
string roman;
for (int i = 6; i >= 0; i -= 2) {
int digit = n / scale;
appToRoman(roman, digit, &symbol[i]);
n %= scale;
scale /= 10;
}
return roman;
}
void appToRoman(string &result, int num, char *symbol) {
if (0 == num) {
return;
} else if (num < 4) {
result.append(num, symbol[0]);
} else if (4 == num) {
result.append(1, symbol[0]);
result.append(1, symbol[1]);
} else if (num < 9) {
result.append(1, symbol[1]);
result.append(num - 5, symbol[0]);
} else {
result.append(1, symbol[0]);
result.append(1, symbol[2]);
}
}