leetcode
做这道题首先查看了一下罗马数字的表示方式,相比于阿拉伯数字真的麻烦!
题目中也是将输入范围限定到3999.
我第一想到的就是用switch语句。
switch(T x ){
case 1:
语句;break;
case 2:
....
default:
break;
}
代码如下:
class Solution {
public:
string intToRoman(int num) {
string ret;
int x1=num%10;
switch(x1){
case 1:
ret='I';
break;
case 2:
ret="II";
break;
case 3:
ret="III";
break;
case 4:
ret="IV";
break;
case 5:
ret='V';
break;
case 6:
ret="VI";
break;
case 7:
ret="VII";
break;
case 8:
ret="VIII";
break;
case 9:
ret="IX";
break;
default:
break;
}
if(num>=10){
int x2=(num/10)%10;
switch(x2){
case 1:
ret='X'+ret;
break;
case 2:
ret="XX"+ret;
break;
case 3:
ret="XXX"+ret;
break;
case 4:
ret="XL"+ret;
break;
case 5:
ret='L'+ret;
break;
case 6:
ret="LX"+ret;
break;
case 7:
ret="LXX"+ret;
break;
case 8:
ret="LXXX"+ret;
break;
case 9:
ret="XC"+ret;
break;
default:
break;
}
}
else
return ret;
if(num>=100){
int x3=(num/100)%10;
switch(x3){
case 1:
ret='C'+ret;
break;
case 2:
ret="CC"+ret;
break;
case 3:
ret="CCC"+ret;
break;
case 4:
ret="CD"+ret;
break;
case 5:
ret='D'+ret;
break;
case 6:
ret="DC"+ret;
break;
case 7:
ret="DCC"+ret;
break;
case 8:
ret="DCCC"+ret;
break;
case 9:
ret="CM"+ret;
break;
default:
break;
}
}
else
return ret;
if(num>=1000){
int x4=(num/1000)%10;
switch(x4){
case 1:
ret='M'+ret;
break;
case 2:
ret="MM"+ret;
break;
case 3:
ret="MMM"+ret;
break;
default:
break;
}
}
else
return ret;
return ret;
}
};
后面看到别人比较简洁的代码如下:
class Solution {
public:
const static string THOUS[];
const static string HUNDS[];
const static string TENS[];
const static string ONES[];
string intToRoman(int num) {
string result;
result += THOUS[(int)(num/1000)%10];
result += HUNDS[(int)(num/100)%10];
result += TENS[(int)(num/10)%10];
result += ONES[num%10];
return result;
}
};
const string Solution::THOUS[] = {"","M","MM","MMM"};
const string Solution::HUNDS[] = {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
const string Solution::TENS[] = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
const string Solution::ONES[] = {"","I","II","III","IV","V","VI","VII","VIII","IX"};
这个代码采用数组的方法。感觉我的好蠢。。。