1.代码
class Solution {
public:
string intToRoman(int num) {
string s;
int a = num / 1000;
int b = num / 100;
int c = num /10;
int d = num % 10;
if(a != 0){
for(int i = 1;i <= a;i ++){
s.append("M");
}
return s.append(intToRoman(num-a*1000));
}
else if(b != 0){
if(b == 4){
s.append("CD");
}
else if(b == 9){
s.append("CM");
}
else if(b<4){
for(int i = 1;i <= b; i ++){
s.append("C");
}
}
else{
s.append("D");
for(int i = 1;i <= b-5;i ++){
s.append("C");
}
}
return s.append(intToRoman(num-b*100));
}
else if(c != 0){
if(c == 4){
s.append("XL");
}
else if(c == 9){
s.append("XC");
}
else if(c < 4){
for(int i = 1;i <= c;i ++){
s.append("X");
}
}
else{
s.append("L");
for(int i = 1;i <= c-5;i ++){
s.append("X");
}
}
return s.append(intToRoman(num - c*10));
}
else if(d == 0) return s;
else{
if(d == 4){
s = "IV";
}
else if(d == 9){
s = "IX";
}
else if(d < 4){
for(int i = 1;i <= d; i ++){
s.append("I");
}
}
else{
s.append("V");
for(int i = 1;i <= d-5;i ++){
s.append("I");
}
}
return s;
}
}
};
2.思路
分别讨论输入为4位数, 3位数,2位数,1位数的情况,用了递归的想法,只处理输入的第一位,对后面的几位调用函数本身。对不同的输入位数分别考虑=4,=9,<4,>4。因为有可能出现末位为0的情况,所以对于输入为零单独讨论。