12. 整数转罗马数字 - 力扣(LeetCode)

根据规则,列出数字对应表,便于之后打表。

【力扣12】整数转罗马数字_打表

圈出的为临界值,用来定范围:只需把目标数放到对应范围,然后依次减去临界值,不断重复直到表示出整个整数。

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;
    }
};