题目:
Roman numerals are represented by seven different symbols: Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, two is written as Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. Example 1: Input: 3 Output: "III" Example 2: Input: 4 Output: "IV" Example 3: Input: 9 Output: "IX" Example 4: Input: 58 Output: "LVIII" Explanation: L = 50, V = 5, III = 3. Example 5: Input: 1994 Output: "MCMXCIV" Explanation: M = 1000, CM = 900, XC = 90 and IV = 4. |
罗马数字包含以下七种字符: 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。 示例 1: 输入: 3 输出: "III" 示例 2: 输入: 4 输出: "IV" 示例 3: 输入: 9 输出: "IX" 示例 4: 输入: 58 输出: "LVIII" 解释: L = 50, V = 5, III = 3. 示例 5: 输入: 1994 输出: "MCMXCIV" 解释: M = 1000, CM = 900, XC = 90, IV = 4. |
思路:用两个表,分别从大到小排列,将数字从大到小减下去,减的位置的字符串就是最终罗马数字。
class Solution {
public:
string intToRoman(int num) {
vector<int> n{1000,900,500,400,100,90,50,40,10,9,5,4,1};
vector<string> s{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV",
"I"};
string ret;
for(int i=0;i<n.size();++i)
{
while(num>=n[i])
{
num-=n[i];
ret+=s[i];
}
}return ret;
}
};