zoukankan      html  css  js  c++  java
  • [string]Roman to Integer,Integer to Roman

    一.Roman to Integer

    Given a roman numeral, convert it to an integer.

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

    罗马数字是阿拉伯数字传入之前使用的一种数码。罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。记数的方法:
    1. 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
    2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
    3. 小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;

      V 和 X 左边的小数字只能用Ⅰ。

      L 和 C 左边的小数字只能用X。

      D 和 M 左 边的小数字只能用C。

    4. 正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)
    5. 在一个数的上面画一条横线,表示这个数扩大1000倍。
    class Solution {
    public:
        int romanToInt(string s) {
            // Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)
            int values[26] ={
                0,0,100,500,0,0,0,0,1,0,0,50,1000,0,0,0,0,0,0,0,0,5,0,10,0,0
            };
            int size = s.size();
            int res = 0;
            for(int i=0;i<size;i++){
                if(i+1<size){
                    if(values[s[i]-'A'] >= values[s[i+1]-'A'])
                        res += values[s[i]-'A'];
                    else
                        res -= values[s[i]-'A'];
                }else{
                    res += values[s[i]-'A'];
                }
            }
            return res;
        }
    };

     二.Integer to Roman

    Total Accepted: 49661 Total Submissions: 138165 Difficulty: Medium

    Given an integer, convert it to a roman numeral.

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

    class Solution {
    public:
        string digitToRoman(int digit,int base,string kvs[][10])
        {
            string res;
            switch(digit){
                case 9: res = kvs[base][digit];break;
                case 8: res += kvs[base][5];res += kvs[base][1];res += kvs[base][1];res += kvs[base][1];break;
                case 7: res += kvs[base][5];res += kvs[base][1];res += kvs[base][1];break;
                case 6: res += kvs[base][5];res += kvs[base][1];break;
                case 5: res = kvs[base][5];break;
                case 4: res = kvs[base][4];break;
                case 3: res += kvs[base][1];res += kvs[base][1];res += kvs[base][1];break;
                case 2: res += kvs[base][1];res += kvs[base][1];break;
                case 1: res += kvs[base][1];break;
                default: res="";
            }
            return res;
        }
        string intToRoman(int num) {
            string kvs[4][10];
            kvs[0][1] = "I"; kvs[0][4]="IV"; kvs[0][5]="V"; kvs[0][9]="IX"; 
            kvs[1][1] = "X";kvs[1][4] = "XL"; kvs[1][5]="L"; kvs[1][9]="XC"; 
            kvs[2][1] = "C"; kvs[2][4] = "CD"; kvs[2][5]="D"; kvs[2][9]="CM"; 
            kvs[3][1] = "M";
            int d = num%10;num/=10;//
            int c = num%10;num/=10;//
            int b = num%10;num/=10;//
            int a = num%10;num/=10;//
            string res =digitToRoman(a,3,kvs)+digitToRoman(b,2,kvs)+digitToRoman(c,1,kvs)+digitToRoman(d,0,kvs);
            return res;
        }
    };
  • 相关阅读:
    JS创建类和对象(好多方法哟!)
    BMI身体质量指数计算公式
    点击button显示文字
    xml中设置button的背景颜色
    Android layout的属性介绍
    eclipse中自动补齐代码设置
    android开发中常用的快捷键
    eclipse修改Android工程图标显示
    Android运行报错
    读《人月神话》有感
  • 原文地址:https://www.cnblogs.com/zengzy/p/5024212.html
Copyright © 2011-2022 走看看