每日算法——letcode系列
问题 Integer to Roman
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 intToRoman(int num) {
}
};
翻译
整数转罗马数字
难度系数:中等
给定一个整数,转成罗马数字。
输入的整数的范围在1到3999间
思路
这个题感觉是在考罗马数字, 先百度百科或维基百科下。
罗马数字共有七个,即I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。按照下面的规则可以表示任意正整数。
重复数次:一个罗马数字重复几次,就表示这个数的几倍。
右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。但是,左减不能跨越等级。比如,99不可以用IC表示,用XCIX表示。
加线乘千:在一个罗马数字的上方加上一条横线或者在右下方写M,表示将这个数字乘以1000,即是原数的1000倍。同理,如果上方有两条横线,即是原数的1000000倍。
单位限制:同样单位只能出现3次,如40不能表示为XXXX,而要表示为XL。
其实一个整数, 可以先选七个中最大可经表示的,再把这个整数减去这个数再递归
例如: 6 最大可以是V(5), 剩下一个是1, 则 6 = VI
代码
class Solution {
public:
string intToRoman(int num) {
const string symbol[] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
const int value[] = {1000,900,500,400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
string roman;
for(int i=0; num != 0; ++i){
while(num >= value[i]){
num -= value[i];
roman += symbol[i];
}
}
return roman;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。