Leetcode在線編程 integer-to-roman

Leetcode在線編程 integer-to-roman

題目鏈接

integer-to-roman

題目描述

Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.


題意

將給定的數字轉換成羅馬數字[1,3999]

解題思路

羅馬數字通過
基本字符
I :1
V:5
X:10
L:50
C:100
D:500
M:1000

1)相同的數字連寫、所表示的數等於這些數字相加得到的數、如:Ⅲ=3;
2)小的數字在大的數字的右邊、所表示的數等於這些數字相加得到的數、 如:Ⅷ=8、Ⅻ=12;
3)小的數字、(限於 Ⅰ、X 和 C)在大的數字的左邊、所表示的數等於大數減小數得到的數、如:Ⅳ=4、Ⅸ=9;
4)正常使用時、連寫的數字重複不得超過三次;
5)在一個數的上面畫一條橫線、表示這個數擴大 1000 倍。
剩下來就簡單了,通過數組存儲個位數,十位數,百位數,千位數,便可以了

AC代碼

class Solution {
public:
    string intToRoman(int num) {
        string tmp;
        char one[][10]={"I","II","III","IV","V","VI","VII","VIII","IX"};
        char ten[][10]={"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
        char hundred[][10]={"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
        char thousand[][10]={"M","MM","MMM"};
        int cnt = num/1000;
        num -= cnt*1000;
        if(cnt>=1)
            tmp+=thousand[cnt-1];
        cnt = num/100;
        num -= cnt*100;
        if(cnt>=1)
            tmp+=hundred[cnt-1];
        cnt = num/10;
        num -= cnt*10;
        if(cnt>=1)
            tmp+=ten[cnt-1];
        if(num>=1)
            tmp+=one[num-1];
        return tmp ;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章