题目描述
给你一个整数,转成罗马数字。
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
通常情况下,罗马数字中小的数字在大的数字的右边。
特殊情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
解题思路
枚举
我们每次取不超过它(罗马数字对应的整数)的最大值,不断的减它。直到0截止。
代码
class Solution { public: string intToRoman(int num) { //枚举 vector<int> sub={1,4,5,9,10,40,50,90,100,400,500,900,1000}; int n=sub.size(); unordered_map<int,string> hash={ {1,"I"}, {4,"IV"}, {5,"V"}, {9,"IX"}, {10,"X"}, {40,"XL"}, {50,"L"}, {90,"XC"}, {100,"C"}, {400,"CD"}, {500,"D"}, {900,"CM"}, {1000,"M"} }; string ret; int i=n-1; while(num) { while(sub[i]>num) i--; ret+=hash[sub[i]]; num-=sub[i]; } return ret; } };