zoukankan      html  css  js  c++  java
  • 12. Integer to Roman

    12. Integer to Roman

    题目

    • Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.
    • 首先要科普一下: 罗马数字
    ·个位数举例
    Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9
    ·十位数举例
    Ⅹ-10、Ⅺ-11、Ⅻ-12、XIII-13、XIV-14、XV-15、XVI-16、XVII-17、XVIII-18、XIX-19、XX-20、XXI-21、XXII-22、XXIX-29、XXX-30、XXXIV-34、XXXV-35、XXXIX-39、XL-40、L-50、LI-51、LV-55、LX-60、LXV-65、LXXX-80、XC-90、XCIII-93、XCV-95、XCVIII-98、XCIX-99
    ·百位数举例
    C-100、CC-200、CCC-300、CD-400、D-500、DC-600、DCC-700、DCCC-800、CM-900、CMXCIX-999
    ·千位数举例
    M-1000、MC-1100、MCD-1400、MD-1500、MDC-1600、MDCLXVI-1666、MDCCCLXXXVIII-1888、MDCCCXCIX-1899、MCM-1900、MCMLXXVI-1976、MCMLXXXIV-1984、MCMXC-1990、MM-2000、MMMCMXCIX-3999
    

    解析

    • 思路一:将所有个十百千位的每一位都列举出来,直接取值即可
    • 思路二:其中每两个阶段的之间有一个减法的表示,比如900=CM, C写在M前面表示M-C。范围给到3999,感觉情况不多直接打表其实更快,用代码判断表示估计比较繁琐。然后就是贪心的做法,每次选择能表示的最大值,把对应的字符串连起来。

    I = 1;
    V = 5;
    X = 10;
    L = 50;
    C = 100;
    D = 500;
    M = 1000;

    class Solution_12 {
    public:
    	string intToRoman(int num) {
    		char* c[4][10] = {        //指针数组
    			{ "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" },
    			{ "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" },
    			{ "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" },
    			{ "", "M", "MM", "MMM" }
    		};                                             
    		string roman;
    		roman.append(c[3][num / 1000 % 10]);
    		roman.append(c[2][num / 100 % 10]);
    		roman.append(c[1][num / 10 % 10]);
    		roman.append(c[0][num % 10]);
    
    		return roman;
    	}
    
    	string intToRoman(int num) {
    		string str;
    		string symbol[] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
    		int value[] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
    		for (int i = 0; num != 0; ++i)
    		{
    			while (num >= value[i])
    			{
    				num -= value[i];
    				str += symbol[i];
    			}
    		}
    		return str;
    	}
    };
    
    
    

    题目来源

  • 相关阅读:
    项目管理实践【三】每日构建【Daily Build Using CruiseControl.NET and MSBuild】
    项目管理实践教程二、源代码控制【Source Control Using VisualSVN Server and TortoiseSVN】
    javascript 容易忽略或者误用的七个基础知识点
    未来的路还很长
    Nodejs
    CSS浏览器兼容性相关
    HTML5
    一些正则
    Sublime 使用
    Array.prototype.slice.call(arguments,1)
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8312738.html
Copyright © 2011-2022 走看看