電源ボタンのブラッシングに関する質問:12。整数をローマ数字に変換します

主題の要件

ここに画像の説明を挿入
ここに画像の説明を挿入

コード:数千、数百、数十、1が順番に処理されます

class Solution {
    
    
public:
    map<int,string> m;
    string intToRoman(int num) {
    
    
        string roman;
        //存储数字各个位(个位、十位、百位)上的数
        int bitNumber;
        mapInit();

        bitNumber = num / 1000;
        strRomanFun(roman, bitNumber, 1000);
        num %= 1000;

        bitNumber = num / 100;
        strRomanFun(roman, bitNumber, 100);
        num %= 100;

        bitNumber = num / 10;
        strRomanFun(roman, bitNumber, 10);
        num %= 10;

        bitNumber = num / 1;
        strRomanFun(roman, bitNumber, 1);
        num %= 1;
        return roman;
    }

    void mapInit()
    {
    
    
        m[1] = "I";
        m[4] = "IV";
        m[5] = "V";
        m[9] = "IX";

        m[10] = "X";
        m[40] = "XL";
        m[50] = "L";
        m[90] = "XC";

        m[100] = "C";
        m[400] = "CD";
        m[500] = "D";
        m[900] = "CM";

        m[1000] = "M";
    }
    void strRomanFun(string& Roman, int bitNumber, int bit)
    {
    
    
        if (bitNumber == 4)
        {
    
    
            Roman += m[4 * bit];
        }
        else if (bitNumber == 9)
        {
    
    
            Roman += m[9 * bit];
        }
        else
        {
    
    
            if (bitNumber / 5)
            {
    
    
                Roman += m[5 * bit];
            }
            for (size_t i = 0; i < (bitNumber%5); i++)
            {
    
    
                Roman += m[bit];
            }
        }
    }
};

事前に設計された

3つの関数すべてがマップに簡単にアクセスできるように、メンバー変数マップがクラスで定義されています。
サブ関数関数mapInitは、マップ
サブ関数関数strRomanFunの初期化を担当し、文字列をビットごとに追加します。

全体のアイデア

まず、数字と対応するローマ字を格納するマップを定義します。
次に、数千、数百、数十、1の順序でローマ字の変換を実行します。

  • このビットの数が0等しい場合は、このビットをスキップしてください
  • このビットの数値が0より大きく4より小さい場合は、文字列の後にビット「1値」の対応する数値を追加します。
  • このビットの数が4等しい場合は、文字列の後にこのビットの「4値」を追加します。
  • このビットの数値が4より大きく9より小さい場合は、このビットの「5値」と、文字列の後に残りの「1値」を追加します。
  • このビットの数が9等しい場合は、文字列の後にこのビットの「9値」を追加します。

例として1994を取り上げ
ます。文字列は最初は空です。

1つ目は千の位の数字1です。1は0より大きく4未満であるため、千の位の「1値」を文字列の後に追加する必要があります。つまり、「M」です。「M」

次は百桁の数字9で、文字列の最後に百桁の「9値」が追加されます。これは900の「CM」です。「MCM」

次は10の位の数字0で、文字列の最後に10の「9値」が追加されます。これは90の「XC」です。「MCMXC」

最後は1桁の数字4で、1桁の「4値」が文字列の最後に追加されます。これは4の「IV」です。「MCMXCIV」

学んだこと

1.マップに要素を挿入する方法を再学習しました

  • インサート付きインサートペア
  • 挿入でvalue_typeを挿入します
  • 配列メソッドを使用する

m[1] = "I";

この質問では、3番目の方法を使用しましたが、マップに値がある場合、この方法は古い値を上書きすることに注意してください。

マップコンテナ操作のリファレンス記事

結果

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/youyadefeng1/article/details/113406290