leetcode第12题--Integer to Roman

Problem:

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

把阿拉伯数字转换为罗马数字输出。百度一下对应的 I V X L C D M,代表1,5,10,50,100,500,1000 然后写一个子函数,输入数字和相应的位数级别,如个位为level 1,千为4.因为最多不会超过四千。所以可以如下。注意了,string用法很好,直接加就可以。

class Solution {
private:
string corRoman(int val, int level)
{
    string base, media, large;
    string s = "";
    if (level == 1) // 个位
    {
        base = "I";
        media = "V";
        large = "X";
    }
    else if (level == 2)
    {
        base = "X";
        media = "L";
        large = "C";
    }
    else if (level == 3)
    {
        base = "C";
        media = "D";
        large = "M";
    }
    else
    {
        base = "M";
    }
    if (val == 0)
        return "";
    if( val < 4)
    {
        for ( int i = 0; i < val; i++)
            s += base;
        return s;
    }
    if (val == 4)
    {
        return base + media;
    }
    if (val < 9)
    {
        s = media;
        for (int i = 5; i < val; i++)
            s+=base;
        return s;
    }
    return base + large;
}
public:
string intToRoman(int num)
{
    string s;
    int a;
    for (int i = 4; i > 0; i-- )
    {
        a = num/pow(10,i - 1);
        num %= (int)pow(10, i - 1);
        s+=corRoman(a,i);
    }
    return s;
}
};

这样就Accept了。

posted on 2014-10-15 00:53  higerzhang  阅读(287)  评论(0编辑  收藏  举报