zoukankan      html  css  js  c++  java
  • Roman to Integer(将罗马数字转成整数)

    Given a roman numeral, convert it to an integer.

    Input is guaranteed to be within the range from 1 to 3999.

    将罗马数字转成阿拉伯数字。需要了解两者对应关系。

    罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。
    1、重复数次:一个罗马数字重复几次,就表示这个数的几倍。

    2、
    2.1 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
    2.2 在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。

    利用规则,可以将字符串对应字符转成对应的数字,存放在数组中,然后将数组中数字相加,相加的时候要满足2.2,即当后一个元素大于前一个元素,表示后一个元素减去前一个元素,也就是和减去前一个元素,加上后一个元素。见代码

     tag:Math,String

    class Solution {
        public int romanToInt(String s) {
            int[] a=new int[s.length()];
            for(int i=0;i<s.length();i++){
                char ch=s.charAt(i);
                if(ch=='I') {a[i]=1;continue;}
                if(ch=='V') {a[i]=5;continue;}
                if(ch=='X') {a[i]=10;continue;}
                if(ch=='L') {a[i]=50;continue;}
                if(ch=='C') {a[i]=100;continue;}
                if(ch=='D') {a[i]=500;continue;}
                if(ch=='M') {a[i]=1000;continue;}
            }
            
            int sum=0;
            for(int i=0;i<a.length-1;i++){
                if(a[i]<a[i+1])
                    sum-=a[i];
                else
                    sum+=a[i];
            }
            
            return sum+a[a.length-1];   //这里因为上面的循环没有操作最后一个数,所以加上最后一个数
        }
    }
  • 相关阅读:
    [CF666E] Forensic Examination
    [BZOJ3739] DZY loves math VIII
    [BZOJ3561] DZY Loves Math VI
    VS中的类模板
    php中的this,self,parent
    js中的 Table 对象
    CEF中弹出窗口的处理
    VC禁止或允许拖拽改变窗口尺寸
    MFC系统自动生成的停靠窗格关掉后,如何重新显示?
    VS2010 如何自动生成UML图
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8066686.html
Copyright © 2011-2022 走看看