LeetCode OJ:Integer to Roman(转换整数到罗马字符)

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 };

 

posted @ 2015-10-08 16:14  eversliver  阅读(274)  评论(0编辑  收藏  举报