Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
给定一个整数,将他转换到罗马字符。同样这里的罗马字符不会超过1000(M),PS:关于罗马字符的介绍看我的这篇文章 :LeetCode OJ:Roman to Integer(转换罗马字符到整数)
这里的大体思路是这样的,例如对于罗马字符952来说,起答题的可以分成三个组成部分, 就是 (1000 - 100):CM, (50): L, (1 + 1): II 这三个部分, 再看看1996, 实际上由1000 : M, (1000 - 100): CM, (100 - 10): XC, 5 : V, 1: I
也就是说900 400 90 40 9 4分别需要用两个的字母来表示,这些表示方法都是有限的,所以可以用一个vector意义列举出来,具体程序如下,比较难想到,一开始我也没想到, 看了 这篇文章 才懂了。代码如下:
1 class Solution { 2 public: 3 string intToRoman(int num) { 4 vector<int> digitNumber{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; 5 vector<string> alpha{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; 6 string result = ""; 7 int sz = digitNumber.size(); 8 for(int i = 0; num != 0; ++i){ 9 while(num >= digitNumber[i]){ 10 num -= digitNumber[i]; 11 result.append(alpha[i]); 12 } 13 } 14 return result; 15 } 16 };