leetcode13

题目:

阿拉伯数字转化为罗马数字

 

解题思路:

设置两个vector,一个放罗马数字,一个放罗马数字所对应的阿拉伯数字;

从给定数字num的最高位开始,逐位转化;n-=2;

如果该位数字是1-3,则在结果字符串上加上该位数字大小个roman[n]

如果该位数字是4,则在结果字符串上加上roman[n] + roman[n-1]

如果改为数字是5-8,则在结果字符串上加上roman[n-1] + 若干个roman[n]

如果该位数字是9,则在结果字符串上加上roman[n]+roman[n-2];

 

代码:

class Solution {
public:
    string intToRoman(int num) {
        string res = "";
        vector<char> roman = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' };
        vector<int> value = { 1000, 500, 100, 50, 10, 5, 1 };
        for (int n = 0; n < 7; n += 2) {
            int x = num / value[n];
            if (x >= 1 && x <= 3) {
                for (int i = 0; i < x; i++) {
                    res += roman[n];
                }
            }
            else if (x == 4) {
                res = res + roman[n] + roman[n - 1];
            }
            else if (x >= 5 && x <= 8) {
                res += roman[n - 1];
                for (int i = 5; i < x; i++) {
                    res += roman[n];
                }
            }
            else if (x == 9) {
                res = res + roman[n] + roman[n - 2];
            }
            num %= value[n];
        }
        return res;
    }
};

 

posted @ 2019-04-01 17:32  yxl2019  阅读(113)  评论(0编辑  收藏  举报