zoukankan      html  css  js  c++  java
  • LeetCode Integer To Roman & Roman To Int

    罗马数字

     有几条须注意掌握;
    (1)基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。
    (2)不能把基本数字 V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。
    (3)V 和 X 左边的小数字只能用Ⅰ。
    (4)L 和 C 左边的小数字只能用×。
    (5)D 和 M 左 边的小数字只能用 C 。

    【对照举例】
    ·个位数举例
    I, 1 II, 2 III, 3 IV, 4 V, 5 VI, 6 VII, 7 VIII,8 IX, 9

    ·十位数举例
    X, 10 XI, 11 XII, 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

    另外参考 http://blog.csdn.net/menxu_work/article/details/9147209

    方法一:

        public String intToRoman(int num) {
                    StringBuilder stringBuilder=new StringBuilder();
            int i=num;
            if(num>=1000 && num<4000)
            {
                int j=i/1000;
                while(j-->0)
                {
                    stringBuilder.append('M');
                }
                stringBuilder.append(intToRoman(i%1000));
            }
            else if(num>=900 && num<1000)
            {
                stringBuilder.append("CM"+intToRoman(i%900));
            }
            else if(num>=500 && num<900)
            {
                stringBuilder.append("D"+intToRoman(i%500));
            }
            else if(num>=400 && num<500)
            {
                stringBuilder.append("CD"+intToRoman(i%400));
            }
            else if(num>=100 && num<400)
            {
                int j=i/100;
                while(j-->0)
                {
                    stringBuilder.append('C');
                }
                stringBuilder.append(intToRoman(i%100));
            }
            else if(num>=90 && num<100)
            {
                stringBuilder.append("XC"+intToRoman(i%90));
            }
            else if(num>=50 && num<90)
            {
                stringBuilder.append("L"+intToRoman(i%50));
            }
            else if(num>=40 && num<50)
            {
                stringBuilder.append("XL"+intToRoman(i%40));
            }
            else if(num>=10 && num<40)
            {
                int j=i/10;
                while(j-->0)
                {
                    stringBuilder.append('X');
                }
                stringBuilder.append(intToRoman(i%10));
            }
            else if(num>=9 && num<10)
            {
                stringBuilder.append("IX");
            }
            else if(num>=5 && num<9)
            {
                stringBuilder.append("V"+intToRoman(i%5));
            }
            else if(num>=4 && num<5)
            {
                stringBuilder.append("IV");
            }
            else if(num>=1 && num<4)
            {
                while(i-->0)
                {
                    stringBuilder.append('I');
                }
            }
            return stringBuilder.toString();
        }

    方法二:

        public String intToRoman(int num) {
            int [] vals={1000,900,500,400,100,90,50,40,10,9,5,4,1};
            String[] romans={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
            StringBuilder stringBuilder=new StringBuilder();
            for(int i=0;i<vals.length;i++)
            {
                while(num>=vals[i])
                {
                    num-=vals[i];
                    stringBuilder.append(romans[i]);
                }
            }
            return stringBuilder.toString();
        }

    Roman To Int

            int [] vals={1000,900,500,400,100,90,50,40,10,9,5,4,1};
            String[] romans={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
            int result=0,offset=0;
            while(offset<s.length())
            {
                for(int i=0;i<romans.length;i++)
                {
                    if(s.startsWith(romans[i],offset))
                    {
                        result+=vals[i];
                        offset+=romans[i].length();
                        break;
                    }
                }
            }
            return result;
  • 相关阅读:
    struts2 之 Action的创建方式
    struts2 之 struts2数据处理
    SuperMap for WebGL 9D 加载平面坐标系三维场景
    SuperMap-WebGL-坐标系及转换说明
    SuperMap -WebGL 实现地球的背景透明并显示自定义图片
    转载: ssh连接上华为云Linux服务器,一会就自动断开
    Arcgis瓦片--js客户端加载
    Arcgis瓦片--数据获取
    转载:Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案
    转载-浏览器优化中的2-5-8原则
  • 原文地址:https://www.cnblogs.com/maydow/p/4628291.html
Copyright © 2011-2022 走看看