内容简介:问题描述:罗马数字包含以下七种字符:例如, 罗马数字 2 写做
问题描述:
罗马数字包含以下七种字符: I
, V
, X
, L
, C
, D
和 M
。
字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000
例如, 罗马数字 2 写做 II
,即为两个并列的 1。12 写做 XII
,即为 X
+ II
。 27 写做 XXVII
, 即为 XX
+ V
+ II
。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII
,而是 IV
。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX
。这个特殊的规则只适用于以下六种情况:
-
I可以放在V(5) 和X(10) 的左边,来表示 4 和 9。 -
X可以放在L(50) 和C(100) 的左边,来表示 40 和 90。 -
C可以放在D(500) 和M(1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
示例 1:
输入: "III" 输出: 3
示例 2:
输入: "IV" 输出: 4
示例 3:
输入: "IX" 输出: 9
示例 4:
输入: "LVIII" 输出: 58 解释: L = 50, V= 5, III = 3.
示例 5:
输入: "MCMXCIV" 输出: 1994 解释: M = 1000, CM = 900, XC = 90, IV = 4. 实现过程:
#include<iostream>
//#include<math.h>
#include<string>
using namespace std;
int romanToInt(string s)
{
char ar[10];
strcpy(ar, s.c_str());
int number = 0;
for (int i = 0; i < strlen(ar); i++)
{
if (ar[i] == 'I')
{
if(i<strlen(ar)-1&&(ar[i+1]=='X'||ar[i+1]=='V'))
{
number -=1;
}
else
{
number += 1;
}
}
else if (ar[i] == 'V')
{
number +=5;
}
else if (ar[i] == 'X')
{
if(i<strlen(ar)-1&&(ar[i+1]=='L'||ar[i+1]=='C'))
{
number -=10;
}
else
{
number += 10;
}
}
else if (ar[i] == 'L')
{
number +=50;
}
else if (ar[i] == 'C')
{
if(i<strlen(ar)-1&&(ar[i+1]=='D'||ar[i+1]=='M'))
{
number -=100;
}
else
{
number += 100;
}
}
else if (ar[i] == 'D')
{
number +=500;
}
else if (ar[i] == 'M')
{
number +=1000;
}
}
return number;
}
int main()
{
char input[20];
cin>>input;
int result=romanToInt(input);
cout<<result<<endl;
return 0;
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 面试常问 HTML题库(长期更新...)
- PHP实现类似题库抽题效果
- 989-数组形式的整数加法
- leetcode刷题-----7. 整数反转
- Python 2.7 源码 - 整数对象
- c# – 为负整数返回零
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Master Switch
Tim Wu / Knopf / 2010-11-2 / USD 27.95
In this age of an open Internet, it is easy to forget that every American information industry, beginning with the telephone, has eventually been taken captive by some ruthless monopoly or cartel. Wit......一起来看看 《The Master Switch》 这本书的介绍吧!