【题目】
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
【题意】
给定一个整数,将其表示成罗马数字
【思路】
罗马数字中只使用如下七个基值字母:M,D,C,L,X,V,I,分别用来表示1000、500、100、50、10、5、1。罗马数组数规则:
基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。
不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。
V 和X 左边的小数字只能用Ⅰ。
L 和C 左边的小数字只能用X。
D 和M 左边的小数字只能用C。
【代码】
class Solution {
public:
string intToRoman(int num) {
string roman="";
//考虑>1000的情况
int baseCount=num/1000; //计算基数的个数
num%=1000; //剩余的值
for(int i=0; i<baseCount; i++)//表示千位数
roman+="M";
//考虑剩余数>=900的情况,因为900需要特殊处理
if(num>=900){
roman+="CM";
num%=900;
}
//考虑剩余数>=500的情况
if(num>=500){
roman+="D";
num%=500;
}
//考虑剩余数>=400的情况,因为400需要特殊处理
if(num>=400){
roman+="CD";
num%=400;
}
//考虑剩余数>=100的情况
if(num>=100){
baseCount=num/100;
num%=100;
for(int i=0; i<baseCount; i++)
roman+="C";
}
//考虑剩余数>=90的情况, 因为90需要特殊处理
if(num>=90){
roman+="XC";
num%=90;
}
//考虑剩余数>=50的情况
if(num>=50){
roman+="L";
num%=50;
}
//考虑剩余数>=40的情况,因为40需要特殊处理
if(num>=40){
roman+="XL";
num%=40;
}
//考虑剩余数>=10的情况
if(num>=10){
baseCount=num/10;
num%=10;
for(int i=0; i<baseCount; i++)
roman+="X";
}
//考虑剩余数>=9的情况
if(num>=9){
roman+="IX";
num%=9;
}
//考虑剩余数>=5的情况
if(num>=5){
roman+="V";
num%=5;
}
//考虑剩余数>=4的情况,因为4需要特殊处理
if(num>=4){
roman+="IV";
num%=4;
}
//考虑剩余数>=1的情况
if(num>=1){
for(int i=0; i<num; i++)
roman+="I";
}
return roman;
}
};