Leetcode12。整数からローマ数字(C ++)

タイトル説明

ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています。

文字の値
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
たとえば、ローマ数字2はIIと表記されて2つの平行な数字を意味し、12はXIIと表記されてX + IIを意味します。27はXXVII、つまりXX + V + IIと表記されます。

通常、ローマ数字の小さい数字は大きい数字の右側にあります。ただし、特別な場合があり、たとえば、4はIIIIではなくIVと表記されます。数1は数5の左側にあり、表される数は、数5から数1を引いた数4に等しくなります。同様に、数字9はIXとして表されます。この特別なルールは、次の6つの状況にのみ適用されます。

V(5)とX(10)の左側に配置して、4と9を表すことができます。
XはL(50)とC(100)の左側に配置して、40と90を表すことができます。 
Cは、D(500)とM(1000)の左側に配置して、400と900を表すことができます。
整数を指定して、ローマ数字に変換します。入力が1から3999の範囲であることを確認してください。

例1:

入力:3
出力: "III"
例2:

入力:4
出力: "IV"
例3:

入力:9
出力: "IX"
例4:

入力:58
出力: "LVIII"
説明:L = 50、V = 5、III = 3
例5:

入力:1994
出力: "MCMXCIV"
説明:M = 1000、CM = 900、XC = 90、IV = 4。

問題解決のアイデア

タイトルには、1から3999までの4つの数値があると規定されています。

つまり、最大はMMMMであるため、1、10、100、および1000桁が対応する番号に対応する必要があります。

問題解決コード


#include <iostream>
#include <string>
using namespace std;

class Solution {
public:
    string getNum1000(int num1000) {
        if(num1000==3){
            return "MMM";
        } else if(num1000==2){
            return  "MM";
        } else if(num1000==1){
            return "M";
        } else{
            return "";
        }
    }


    string getNum100(int num100) {




        switch (num100) {
            case 1:return "C";
            case 2:return "CC";
            case 3:return "CCC";
            case 4:return "CD";
            case 5:return "D";
            case 6:return "DC";
            case 7:return "DCC";
            case 8:return "DCCC";
            case 9:return "CM";
            default:return "";
        }

    }

    string getNum10(int num10) {

        switch (num10) {
            case 1:return "X";
            case 2:return "XX";
            case 3:return "XXX";
            case 4:return "XL";
            case 5:return "L";
            case 6:return "LX";
            case 7:return "LXX";
            case 8:return "LXXX";
            case 9:return "XC";
            default:return "";
        }


    }


    string getNum1(int num1) {
        switch (num1) {
            case 1:return "I";
            case 2:return "II";
            case 3:return "III";
            case 4:return "IV";
            case 5:return "V";
            case 6:return "VI";
            case 7:return "VII";
            case 8:return "VIII";
            case 9:return "IX";
            default:return "";
        }
    }

    string intToRoman(int num) {
        int num1000 = num/1000;
        int num100 = (num%1000)/100;
        int num10 = (num%100)/10;
        int num1 = (num%10);
        string res;
        res = getNum1000(num1000) + getNum100(num100)+getNum10(num10)+getNum1(num1);
        return res;
    }
};

//int main(){
//    Solution solution;
//    string string1 = solution.intToRoman(1994);
//    cout<<string1;
//    return 0;
//}

おすすめ

転載: blog.csdn.net/Kangyucheng/article/details/108504857