LeetCode 12. Integer to Roman

将(1-3999)的阿拉伯数字转化为罗马数字。
罗马数字中,I、V、X、L、C、D和M,分别表示1、5、10、50、100、500和1000。
只需要注意4和9这两个数字就可以了

class Solution
{
public:
    string intToRoman(int num)
    {
        string str;
        string s = "1IVXLCDM";
        int l = 1000, k = 4;

        while(l > 0)
        {
            int t = num / l;
            if(t != 0)
            {
                if(t < 4)
                {
                    str += string(t, s[2*k-1]);
                }
                else if(t == 4)
                {
                    str += s[2*k-1];
                    str += s[2*k];
                }
                else if(t == 9)
                {
                    str += s[2*k-1];
                    str += s[2*k+1];
                }
                else
                {
                    str += s[2*k];
                    str += string(t-5, s[2*k-1]);
                }
            }
            num %= l;
            l /= 10;
            k --;
        }

        return str;
    }
};
posted @ 2017-03-07 20:18  aiterator  阅读(99)  评论(0编辑  收藏  举报