Problem
leetcode链接problem
Code
题目其实并不是很难,就是按照思路一直从大到小一直写下去就可以了。
class Solution {
public:
string intToRoman(int num) {
string result;
int change = num;
if(num >= 1000)//处理千位部分
{
int thousand = change / 1000;
for (int i = 0; i < thousand; ++i) {
result.append(1,'M');
}
change = change % 1000;
}
if(change >= 900){//处理百位部分
result.append(1,'C');
result.append(1,'M');
change = change % 100;
}
if(change >= 500){
result.append(1,'D');
int hundred = (change - 500) / 100;
for (int i = 0; i < hundred; ++i) {
result.append(1,'C');
}
change = change % 100;
}
if(change >= 400){
result.append(1,'C');
result.append(1,'D');
change = change % 100;
}
if(change >= 100){
int hundred = change / 100;
for (int i = 0; i < hundred; ++i) {
result.append(1,'C');
}
change = change % 100;
}
//处理十位部分
if(change >= 90){
result.append(1,'X');
result.append(1,'C');
change = change % 10;
}
if(change >= 50){
result.append(1,'L');
int decade = (change - 50) / 10;
for (int i = 0; i < decade; ++i) {
result.append(1,'X');
}
change = change % 10;
}
if(change >= 40) {
result.append(1, 'X');
result.append(1, 'L');
change = change % 10;
}
if(change >= 10){
int decade = change / 10;
for (int i = 0; i < decade; ++i) {
result.append(1,'X');
}
change = change % 10;
}
//处理完十位,再处理各位部分,嘿嘿嘿
if(change == 9){
result.append(1,'I');
result.append(1,'X');
return result;
}
if(change >= 5){
result.append(1,'V');
int unit = change - 5;
for (int i = 0; i < unit; ++i) {
result.append(1,'I');
}
return result;
}
if(change == 4) {
result.append(1, 'I');
result.append(1, 'V');
return result;
} else{
for (int i = 0; i < change; ++i) {
result.append(1,'I');
}
return result;
}
return result;
}
};