将罗马数字转换成整数

来源:互联网 发布:烟台模具编程招聘 编辑:程序博客网 时间:2024/05/17 06:18
/***********************************************************************
给定一个罗马数字s,( I<=s<=MMMCMXCIX)(即1到3999),将罗马数字转换成整数。


如罗马数字I,II,III,IV,V分别代表数字1, 2, 3, 4, 5。


格式:


第一行输入一个罗马数字,接下来输出对应的整数。


提示:


首先要来了解一下罗马数字表示法,基本字符有7个:I,V,X,L,C,D,M,分别表示1,5,10,50,100,500,1000。


在构成数字的时候,有下列规则:


1、相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;


2、小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;


3、小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;


4、正常使用时,连写的数字重复不得超过三次。
***********************************************************************/


#include <iostream>
#include <string>
using namespace std;


class Solution {
public:
    int romanToInt(string s);
char compare( int temp1, int temp2 );
};


int Solution::romanToInt(string s)
{
int result = 0;
int len = s.size( );
int *data = new int[len];
for( int i = 0; i < len; i++ )
{
switch( s[i] )
{
case 'I':data[i] = 1;break;
case 'V':data[i] = 5;break;
case 'X':data[i] = 10;break;
case 'L':data[i] = 50;break;
case 'C':data[i] = 100;break;
case 'D':data[i] = 500;break;
case 'M':data[i] = 1000;break;
}
}
result = data[len-1];
for( int i = len - 1; i >= 1; i-- )
{
switch( compare( data[i], data[i-1] ) )
{
case '<':result = result + data[i-1];break;
case '=':result = result + data[i-1];break;
case '>':result = result - data[i-1];break;
}
}
return result;
}


char Solution::compare( int temp1, int temp2 )
{
if( temp1 < temp2 )
return '<';
if( temp1 == temp2 )
return '=';
if( temp1 > temp2 )
return '>';
}


int main( int argc, char *argv[] )
{
Solution temp;
int answear = temp.romanToInt( "MDCCCXCIX" );
cout<<"answear = "<<answear<<endl;
system( "pause" );
}
0 0
原创粉丝点击