一.Roman to Integer
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法:
-
相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
-
小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
-
小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
V 和 X 左边的小数字只能用Ⅰ。
L 和 C 左边的小数字只能用X。
D 和 M 左 边的小数字只能用C。
-
正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)
- 在一个数的上面画一条横线,表示这个数扩大1000倍。
class Solution { public: int romanToInt(string s) { // Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500) int values[26] ={ 0,0,100,500,0,0,0,0,1,0,0,50,1000,0,0,0,0,0,0,0,0,5,0,10,0,0 }; int size = s.size(); int res = 0; for(int i=0;i<size;i++){ if(i+1<size){ if(values[s[i]-'A'] >= values[s[i+1]-'A']) res += values[s[i]-'A']; else res -= values[s[i]-'A']; }else{ res += values[s[i]-'A']; } } return res; } };
二.Integer to Roman
Total Accepted: 49661 Total Submissions: 138165 Difficulty: Medium
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
class Solution { public: string digitToRoman(int digit,int base,string kvs[][10]) { string res; switch(digit){ case 9: res = kvs[base][digit];break; case 8: res += kvs[base][5];res += kvs[base][1];res += kvs[base][1];res += kvs[base][1];break; case 7: res += kvs[base][5];res += kvs[base][1];res += kvs[base][1];break; case 6: res += kvs[base][5];res += kvs[base][1];break; case 5: res = kvs[base][5];break; case 4: res = kvs[base][4];break; case 3: res += kvs[base][1];res += kvs[base][1];res += kvs[base][1];break; case 2: res += kvs[base][1];res += kvs[base][1];break; case 1: res += kvs[base][1];break; default: res=""; } return res; } string intToRoman(int num) { string kvs[4][10]; kvs[0][1] = "I"; kvs[0][4]="IV"; kvs[0][5]="V"; kvs[0][9]="IX"; kvs[1][1] = "X";kvs[1][4] = "XL"; kvs[1][5]="L"; kvs[1][9]="XC"; kvs[2][1] = "C"; kvs[2][4] = "CD"; kvs[2][5]="D"; kvs[2][9]="CM"; kvs[3][1] = "M"; int d = num%10;num/=10;//个 int c = num%10;num/=10;//十 int b = num%10;num/=10;//百 int a = num%10;num/=10;//千 string res =digitToRoman(a,3,kvs)+digitToRoman(b,2,kvs)+digitToRoman(c,1,kvs)+digitToRoman(d,0,kvs); return res; } };
Next challenges: (M) Integer to English Words