这道题我哭了,不是难,终于学会了罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I可以放在V(5) 和X(10) 的左边,来表示 4 和 9。X可以放在L(50) 和C(100) 的左边,来表示 40 和 90。C可以放在D(500) 和M(1000) 的左边,来表示 400 和 900。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。
class Solution {
public:
string intToRoman(int num) {
string res;
while(num>=1000){
res.push_back('M');
num-=1000;
}
if(num>=900){
res.push_back('C');
res.push_back('M');
num-=900;
}else if(num>=500){
res.push_back('D');
num-=500;
while(num>100){
res.push_back('C');
num-=100;
}
}else if(num>=400){
res.push_back('C');
res.push_back('D');
num-=400;
}
while(num>=100){
res.push_back('C');
num-=100;
}
if(num>=90){
res.push_back('X');
res.push_back('C');
num-=90;
}else if(num>=50){
res.push_back('L');
num-=50;
while(num>10){
res.push_back('X');
num-=10;
}
}else if(num>=40){
res.push_back('X');
res.push_back('L');
num-=40;
}
while(num>=10){
res.push_back('X');
num-=10;
}
if(num>=9){
res.push_back('I');
res.push_back('X');
num-=9;
}else if(num>=5){
res.push_back('V');
num-=5;
while(num>1){
res.push_back('I');
num-=1;
}
}else if(num>=4){
res.push_back('I');
res.push_back('V');
num-=4;
}
while(num>=1){
res.push_back('I');
num-=1;
}
return res;
}
};
博客介绍了罗马数字包含的七种字符,以及其一般表示规则和特殊规则。特殊规则适用于六种情况,如I可放V和X左边表示4和9等。还提到给定1到3999范围内的整数,要将其转为罗马数字。
521

被折叠的 条评论
为什么被折叠?



