根据规则,列出数字对应表,便于之后打表。
圈出的为临界值,用来定范围:只需把目标数放到对应范围,然后依次减去临界值,不断重复直到表示出整个整数。
class Solution {
public:
string intToRoman(int num) {
int values[] = {//打表找出的临界值
1000,
900, 500, 400, 100,
90, 50, 40, 10,
9, 5, 4, 1,
};
string reps[] = {//临界值对应的字母表示
"M",
"CM", "D", "CD", "C",
"XC", "L", "XL", "X",
"IX", "V", "IV", "I",
};
string res;//结果
for(int i = 0; i<13; i++){//从大到小减去临界值
while(num >= values[i]){
num -= values[i];
res += reps[i];//结果为字符串,直接拼接
}
}
return res;
}
};