力扣 题目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); }