力扣 题目12- 整数转罗马数字

题目


题解


 

1.首先 我们可以发现除了千位数以为都是和三个字母有关系(百位是CDM 十位是XLC 个位是IVX)

由于4和9是组合而来所以 我们写一个字符串 判断一下当前位数 然后修改和上面一样(4是第一位和第二位组合 9是第一位和第三位组合)

然后判断一下数的范围添加到字符串后面即可

2.力扣官方的另一种解发 采用了把罗马数字和数的位数对应成一张表 然后需要的时候再根据余数找的做法 具体可以点击这里

代码


#include<iostream>
#include<string>
using namespace std;
//int pow(10, i);
//int a = atoi(s.c_str());
class Solution {
public:
    string intToRoman(int num) {
        string real = to_string(num);
        string Rome = "";
        int length= real.size();
        for (int i = real.size()-1; i >-1; i--) {
            int now = real.size() - 1 - i;
            int num = real[now] - 48;
            string number;
            if (i >= 3) {
                number = "M";
            }
            else if(i >= 2)
            {
                number = "CDM";
                
            }
            else if (i >= 1)
            {
                number = "XLC";
            }
            else if (i >= 0)
            {
                number = "IVX";
            }
            if (num > 0 && num < 4) {
                for (int j = 0; j < num; j++) {
                    Rome = Rome + number[0];
                }
            }
            else if (num == 4) {
                Rome = Rome + number[0] + number[1];

            }
            else if (num > 4 && num < 9) {
                Rome = Rome + number[1];
                for (int j = 5; j < num; j++) {
                    Rome = Rome + number[0];
                }
            }
            else if (num == 9) {
                Rome = Rome + number[0] + number[2];
            }
        }
        cout << Rome << endl;
        return Rome;
    }
};
 
 int main() {
     Solution sol;
     int num = 27;
     sol.intToRoman(num);
 }

 

posted @ 2022-03-30 16:11  无聊的阿库娅  阅读(38)  评论(0编辑  收藏  举报