Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
分析:这道题参考leetcode.pdf的解法,代码简洁,处理的巧妙。值得借鉴的几点如下:
(1)将1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1作为基数,从而不用单独处理900,400,90,40,9,4等特殊的情况。
(2)从大的基数开始计算,更简单,因为底数只有13个且最大值为3999,此种方法是可行的。
class Solution {public: string intToRoman(int num) { int radix[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; string symbol[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; string result; for(int i = 0; num > 0; i++){ int count = num/radix[i]; num %= radix[i]; while(count > 0){ result += symbol[i]; count--; } } return result; }};