Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字是由字符I,V,X,L,C,D,M等等表示的,其中
I = 1;
V = 5;
X = 10;
L = 50;
C = 100;
D = 500;
M = 1000;
接下来应该是V开始的重复,但是上面要加一个横线,表示对应数字的1000倍。
个位应该是:I,II,III,IV,V,VI,VII,VIII,IX
十位应该是:X,XX,XXX,XL,L,LX,LXX,LXXX,XC
百位应该是:C,CC,CCC,CD,D,DC,DCC,DCCC,CM
void romanstr(string& roman, int num, char* symbol)
{
if(num == 0)return;
else if(num <= 3) roman.append(num, *symbol);
else if(num == 4){
roman.append(1,*symbol);
roman.append(1,*(symbol+1));
}else if(num <= 8){
roman.append(1,*(symbol+1));
roman.append(num-5,*symbol);
}else if(num == 9){
roman.append(1,*symbol);
roman.append(1,*(symbol+2));
}
}
string intToRoman(int num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
char symbol[9] = {'I','V','X','L','C','D','M'};
string roman="";
int scale = 1000;
int p=6;
while(num)
{
int bit = num/scale;
romanstr(roman, bit, symbol+p);
num = num%scale;
scale /= 10;
p -= 2;
}
return roman;
}