LeetCode 12.Integer to Roman
2017-05-04 14:23
316 查看
题目
Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.分析
罗马数字计数方法header 1 | header 2 |
---|---|
罗马字符 | 证书数字 |
I | 1 |
V | 5 |
X | 10 |
L | 50 |
C | 100 |
D | 500 |
M | 1000 |
- 相同的数字连写,所表示的数等于这些数字相加得到的数,如III=3
- 小的数字在大的数字右边,所表示的数等于这些数据相加得到的数VIII=8,XII=12
- 小的数字,限于I、X、C在大的数字左边,所表示的数等于大数减去小数得到的数,如IV=4,IX=9;
- 正常使用时,连写的数字重复不得超过三次
- 在一个数的上面画一条横线,表示这个数扩大1000倍
- 注意事项
- 基本数字I、X、C中的任何一个 自身连用构成数目,或者放在大数右边构成数目,都不能超过三个,放在大数左边不能超过一个
- 不能把基本数字VLD中的任何一个作为小数放在大数的左边采用相减的方法构成数目,放在大数的右边采用相加的方式构成数目,只能使用一个
- V和X的左边的小数字只能用I,且只能有一个
- L和C左边的小数字只能用X,且只能有一个
- D和M左边的小数字只能用C,且只能有一个
- 算法:对数字的每位逐个判断
- 如果该位数字是9,则说明是上面3、4、5这三种情况中的一种,即把I、X、C中的一个放到了大数字的左侧;
- 如果该位数字是5~8,则说明是上面1这种情况,即I、X、C中的一个,自身连用或者放在大数的右边连用;
- 如果该位数字是4,则说明同样是上面3、4、5这三种情况中的一种,即把I、X、C中的一个放到了大数字的左侧;
- 如果该位数字是0~3,则同样说明是上面1这种情况,即I、X、C中的一个,自身连用或者放在大数的右边连用。
代码
std::string intToRoman2(int num) { std::string s = ""; if (num > 0 && num <= 3999){ std::cout << num << std::endl; int n1[] = { 1000, 100, 10, 1 }; char r1[] = { 'M', 'C', 'X', 'I' }; char r2[] = { ' ', 'D', 'L', 'V' }; for (int i = 0; i < 4; ++i) { int b = num / n1[i]; if (b == 9) s = s + r1[i] + r1[i - 1]; else if (b >= 5) { s += r2[i]; for (int j = 0; j < b - 5; ++j) s += r1[i]; } else if (b == 4) s = s + r1[i] + r2[i]; else { for (int j = 0; j < b; ++j) s += r1[i]; } num = num % n1[i]; } } return s; }
相关文章推荐
- [leetcode 12] Integer to Roman
- Leetcode_12_Integer to Roman
- LeetCode 12 - Integer to Roman
- leetcode[12]Integer to Roman
- [Leetcode 44] 12 Integer To Roman
- leetcode12 Integer to Roman
- LeetCode12: Integer to Roman
- leetcode_12题——Integer to Roman(string,数学问题)
- LeetCode12~14 Integer to Roman/Roman to Integer/Longest Common Prefix
- [Leetcode] 12 - Integer to Roman
- Leetcode 12 Integer to Roman整数变罗马
- [LeetCode]12.Integer to Roman
- Java [leetcode 12] Integer to Roman
- [LeetCode]12 Integer to Roman
- Integer to Roman_Leetcode_#12
- [LeetCode 12] Integer to Roman
- leetcode.12----------Integer to Roman
- LeetCode 12 - Integer to Roman
- LeetCode 12 Integer to Roman(C,C++,Java,Python)
- [Leetcode] 12. Integer to Roman