Roman to Integer and Integer to Roman

来源:互联网 发布:大数据 客户画像 编辑:程序博客网 时间:2024/04/29 14:22

Roman to Integer

Given a roman numeral, convert it to an integer.

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

Subscribe to seewhich companies asked this question.

Solving problemsusing C++

 

class Solution{

public:

    int romanToInt(string s) {

        // Add yours code

    }

};

/*Author:杨柳Date:2017/5/4 IDE:DEV-c++ 罗马数字规则:1, 罗马数字共有7个,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。罗马数字中没有"0"。2, 重复次数:一个罗马数字最多重复3次。3, 右加左减:在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。4, 左减的数字有限制,仅限于I、X、C,且放在大数的左边只能用一个。(*) V 和 X 左边的小数字只能用Ⅰ。(*) L 和 C 左边的小数字只能用X。(*) D 和 M 左 边的小数字只能用C。用户输入一个数字,遍历这个数字,sum计算和,如果前一个数字大于后一个直接相加,如果小于后一个数字,加和用sum减去前一个较小的数字的两倍 例如:MCMLXX 代表1970 M>C sum=1000+100  C<M sum=sum+1000-100*2  M>L sum=sum+50 L>X sum=sum+20 X=X sum=sum+20 */#include<stdio.h>#include<string>#include<iostream>using namespace std;class Solution {  public:      int romanToInt(string s) {  int sum=changeint(s[0]);              for (int i = 0; i < s.length()-1; i++) {              if (changeint(s[i]) < changeint(s[i+1])) {                  sum += changeint(s[i+1]) - 2 * changeint(s[i]);  // 如果i比i+1小的话,则将总和sum减去i这个地方数的两倍,同时加上i+1            } else {                  sum += changeint(s[i+1]);   // 如果,i比i+1大的话,直接相加            }          }          return sum;           }           int changeint(char ch) {          switch (ch) {              case 'I': return 1;              case 'V': return 5;              case 'X': return 10;              case 'L': return 50;              case 'C': return 100;              case 'D': return 500;              case 'M': return 1000;          }      }// 阿拉伯数字转罗马数字/*string IntToroman(int num){        string sum;       if (num >= 1000) {            sum += changeroman(num - num % 1000);            num %= 1000;        }        if (num >= 100) {            sum += changeroman(num - num % 100);            num %= 100;        }        if (num >= 10) {            sum += changeroman(num - num % 10);            num %= 10;        }                sum += changeroman(num);                return sum;    }  string changeroman(int num) {         switch(num) {            case 1: return "I";            case 2: return "II";            case 3: return "III";            case 4: return "IV";            case 5: return "V";            case 6: return "VI";            case 7: return "VII";            case 8: return "VIII";            case 9: return "IX";            case 10: return "X";            case 20: return "XX";            case 30: return "XXX";            case 40: return "XL";            case 50: return "L";            case 60: return "LX";            case 70: return "LXX";            case 80: return "LXXX";            case 90: return "XC";            case 100: return "C";            case 200: return "CC";            case 300: return "CCC";            case 400: return "CD";            case 500: return "D";            case 600: return "DC";            case 700: return "DCC";            case 800: return "DCCC";            case 900: return "CM";            case 1000: return "M";            case 2000: return "MM";            case 3000: return "MMM";        }    }*/        //阿拉伯数字转罗马数字(方法二)        string IntToroman(int num){char ch[][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 sum = ch[3][num / 1000] + ch[2][num % 1000 / 100] +ch[1][num % 100 / 10] +ch[0][num % 10];    return sum;}}; int main(){Solution sl;string str;int num; cout<<"罗马字符转化为阿拉伯数字"<<endl;cout<<"请输入一个罗马数字:"<<endl;cin>>str;cout<<"罗马数字所对应的阿拉伯数字为:"<<endl; cout<<sl.romanToInt(str)<<endl;    cout<<"请输入一个阿拉伯数字:"<<endl;cin>>num;cout<<"阿拉伯数字所对应的罗马数字为:"<<endl; cout<<sl.IntToroman(num);}


0 0
原创粉丝点击