【计蒜客系列】挑战难题14:罗马数字转换成整数
来源:互联网 发布:高仿浪琴手表淘宝店 编辑:程序博客网 时间:2024/06/06 00:11
题目来源:计蒜客
给定一个罗马数字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、正常使用时,连写的数字重复不得超过三次。
样例1
输入:
CXXIII
输出:
123
注:
1、基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。
2、不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。
3、V 和X 左边的小数字只能用Ⅰ。
4、L 和C 左边的小数字只能用X。
5、D 和M 左边的小数字只能用C。
IIV4IX9XXL40XC90CCD400CM900一个字符一个字符的向后计算。
#include<stdio.h>#include<string.h>int main(int argc, char **argv){ char s[100];int i,len,count=0; scanf("%s",&s);len= strlen(s);for(i=0;i<len;i++){switch(s[i]){case 'M':count+=1000;break;case 'D':count+=500;break;case 'C':if(s[i+1]=='D'||s[i+1]=='M')count-=100;elsecount+=100;break;case 'L':count+=50;break;case 'X':if(s[i+1]=='L'||s[i+1]=='C')count-=10;elsecount+=10;break;case 'V':count+=5;break;case 'I':if(s[i+1]=='V'||s[i+1]=='X')count--;elsecount++;break;default:printf("error!\n");}}printf("%d\n",count);return 0;}
0 0
- 【计蒜客系列】挑战难题14:罗马数字转换成整数
- 【计蒜客系列】挑战难题13:整数转换成罗马数字
- 计蒜客挑战难题:整数转换成罗马数字
- 计蒜客 挑战难题 罗马数字转换成整数
- 计蒜客 挑战难题 第14题:罗马数字转换成整数
- “计蒜客”-挑战难题-14:罗马数字转换成整数
- 计蒜课挑战难题:罗马数字转换成整数
- 计蒜客 挑战难题 第13题:整数转换成罗马数字
- “计蒜客”-挑战难题-13:整数转换成罗马数字
- 计蒜客 难题题库 013 整数转换成罗马数字
- 计蒜客 难题题库 014 罗马数字转换成整数
- 计蒜客整数转换成罗马数字
- 计蒜客罗马数字转换成整数
- 计蒜客 -- 罗马数字转换成整数
- 计蒜客 -- 整数转换成罗马数字
- 计蒜客 整数转换成罗马数字
- 计蒜客 整数转换成罗马数字
- 计蒜客 罗马数字转换成整数
- 数字电路、单片机的抗干扰设计
- Java线程面试题Top50
- A股“灾”后重建任道重远
- NodeMCU上通过DS18b20采集室温
- Android 自定义Dialog背景透明及显示位置设置
- 【计蒜客系列】挑战难题14:罗马数字转换成整数
- sourceinsight的快捷键和使用方法
- 对字符串编辑,替换颜色,下划线。
- Linux性能之CPU性能
- android layout_gravity失效的问题
- SqlServer: 查询当前正在运行的SQL
- c++学习笔记(二)
- 阿里前端电话面试
- Android学习笔记之——Timer中schedule()的用法