题目描述:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
分析:
题意:给定一个阿拉伯数字(范围是1~3999),把它转化为对应的罗马数字。
思路:这是一道数学题,我们需要知道阿拉伯数字和罗马数字的转化关系:罗马基本字符和对应的阿拉伯数字为M→1000,D→500,C→100,L→50,X→10,V→5,I→1;罗马复合字符和对应的阿拉伯数字为CM→1000-100=900,CD→500-100=400,XC→100-10=90,XL→50-10=40,IX→10-1=9,IV→5-1=4。
我们把映射关系保存好,然后从大到小判断给定的整数是否包含该罗马字符,如果包含,在答案中加上该罗马字符、在给定整数中减去对应的阿拉伯数值,直到给定整数为0,返回结果。
代码:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string intToRoman(int num) {
int list_int[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
string list_roman[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
string ans = "";
while(num > 0){
for(int i = 0; i <= 12; i++){
if(num >= list_int[i]){
ans += list_roman[i];
num -= list_int[i];
break;
}
}
}
return ans;
}
};