Integer to Roman
这几天时间比较碎片化,题目都是跳着做的,慢慢会把前面没做的补上。
关于这个题。
花了一点时间研究了一下罗马数字的规律。
结合这个题目的思路:
1、首先将输入的数字的每一位的值取出来。
2、从千位开始,依次对结果字符串累加。
注:
从罗马字符的规律来看,我把其分为1~3,4,5~8,9这几个段位。
分别对每一位进行这几个段位规律进行处理,这种方法代码量比较大,网上有先将特殊数字(1,4,5,9)保存的方法:http://blog.youkuaiyun.com/beiyeqingteng/article/details/8547565
我的代码:
class Solution {
public:
string intToRoman(int num) {
string result = "";
vector<int> myVec;
int x=num;
while(x)
{
myVec.push_back(x%10);
x=x/10;
}
int i;
for(i=myVec.size()-1;i>=0;i--)
{
switch(i){
case 3:
while(myVec[i]--)
result=result+"M";
break;
case 2:
if(myVec[i]==4)
result=result+"CD";
else if(myVec[i]<=3 && myVec[i]>=1)
{
while(myVec[i]--)
result=result+"C";
}
else if(myVec[i]<=8 && myVec[i]>=5)
{
result = result+"D";
while((myVec[i]--)-5)
{
result=result+ "C";
}
}
else if(myVec[i]==9)
{
result =result + "CM";
}
else
continue;
break;
case 1:
if(myVec[i]==4)
result=result+"XL";
else if(myVec[i]<=3 && myVec[i]>=1)
{
while(myVec[i]--)
result=result+"X";
}
else if(myVec[i]<=8 && myVec[i]>=5)
{
result = result+"L";
while((myVec[i]--)-5)
{
result=result+ "X";
}
}
else if(myVec[i]==9)
{
result =result + "XC";
}
else
continue;
break;
case 0:
if(myVec[i]==4)
result=result+"IV";
else if(myVec[i]<=3 && myVec[i]>=1)
{
while(myVec[i]--)
result=result+"I";
}
else if(myVec[i]<=8 && myVec[i]>=5)
{
result = result+"V";
while((myVec[i]--)-5)
{
result=result+ "I";
}
}
else if(myVec[i]==9)
{
result =result + "IX";
}
else
continue;
break;
}
}
return result;
}
};