LeetCode-Integer to Roman
题目:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
题目分析:
看了半天,题目都没看懂,都不知道了roman numeral是什么东西.于是在网上查了下,才明白是个什么东东,表示很无语.
模拟题:
基本字符 | I | V | X | L | C | D | M |
相应的阿拉伯数字表示含义 | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
1.相同的数字连写,所表示的数等于这些数字相加得到的数,如:III =3;
2.小的数字在大的数字的左边,则所表示的数等于大数减小的数得到的数.如:IV=4;iX=9;
3.小的数字在大的数字的右边,则所表示的数等于大数加上小的数得到的数.如:VI=6;XI=11;
代码:
class Solution{ public: void setDigit(string &res,int n,char a,char b,char c){ if(n<4){ for(int i=0;i<n;i++){ res.push_back(a); } } else if(n==4){ res.push_back(a); res.push_back(b); } else if(n==5){ res.push_back(b); } else if(n>5 && n<9){ res.push_back(b); for(int i=5;i<n;i++){ res.push_back(a); } } else if(n==9){ res.push_back(a); res.push_back(c); } } string intToRoman(int num){ int a1=(num/1000)%10,a2=(num/100)%10,a3=(num/10)%10,a4=num%10; setDigit(res,a1,'M','?','?'); setDigit(res,a2,'C','D','M'); setDigit(res,a3,'X','L','C'); setDigit(res,a4,'I','V','X'); return res; } };
参考别人写的...