#leetcode刷题之路12-整数转罗马数字

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000


例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

 

垃圾做法:

#include <iostream>
using namespace std;
string intToRoman(int num) {
    int wei[4] = { 0, 0, 0, 0 };
    string ge = "";
    string shi = "";
    string bai = "";
    string qian = "";
    int i = 0;
    string s = "";
    //先把个位十位百位千位提取出来
    while (i <= 3)
    {
        wei[i++] = num % 10;
        num /= 10;
    }
    cout << wei[0] << endl;
    if (wei[0] != 0)
    {
        switch (wei[0])
        {
            case 1:ge = 'I';
                break;
            case 2:ge = "II";
                break;
            case 3:ge = "III";
                break;
                break;
            case 4:ge = "IV";
                break;
            case 5:ge = "V";
                break;
            case 6:ge = "VI";
                break;
            case 7:ge = "VII";
                break;
            case 8:ge = "VIII";
                break;
            case 9:ge = "IX";
                break;
        }
    }
    cout << wei[1] << endl;
    if (wei[1] != 0)
    {
        switch (wei[1])
        {
            case 1:shi = 'X';
                break;
            case 2:shi = "XX";
                break;
            case 3:shi = "XXX";
                break;
            case 4:shi = "XL";
                break;
            case 5:shi = 'L';
                break;
            case 6:shi = "LX";
                break;
            case 7:shi = "LXX";
                break;
            case 8:shi = "LXXX";
                break;
            case 9:shi = "XC";
                break;

        }
    }
    cout << wei[2] << endl;
    if (wei[2] != 0)
    {
        switch (wei[2])
        {
            case 1:bai = 'C';
                break;
            case 2:bai = "CC";
                break;
            case 3:bai = "CCC";
                break;
            case 4:bai = "CD";
                break;
            case 5:bai = 'D';
                break;
            case 6:bai = "DC";
                break;
            case 7:bai = "DCC";
                break;
            case 8:bai = "DCCC";
                break;
            case 9:bai = "CM";
                break;
        }
    }
    cout << wei[3] << endl;
    if (wei[3] != 0)
    {
        switch (wei[3])
        {
            case 1:qian = 'M';
                break;
            case 2:qian = "MM";
                break;
            case 3:qian = "MMM";
                break;
        }
    }
    return qian + bai + shi + ge;
}

int main() {
    int num=1994;
    std::cout << intToRoman(num)<< std::endl;
    return 0;
}

 

 

 

 

 

posted @ 2019-02-28 19:18  maitianpt  阅读(224)  评论(0编辑  收藏  举报