13. Roman to Integer
来源:互联网 发布:算法就是程序 编辑:程序博客网 时间:2024/06/17 13:28
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)。记数的方法:
相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
初始代码
#include<stdio.h>#include<string.h>int rank(char a){ if(a=='I') return 1; else if(a=='V') return 2; else if(a=='X') return 3; else if(a=='L') return 4; else if(a=='C') return 5; else if(a=='D') return 6; else return 7;}int number(char a){ switch(a) { case'I':return 1;break; case'X':return 10;break; case'C':return 100;break; case'M':return 1000;break; case'V':return 5;break; case'L':return 50;break; case'D':return 500;break; default:return 0;break; }}int romanToInt(char* s) { int sum=0,i; for(i=0;i<strlen(s)-1;i++) { if(rank(s[i])<rank(s[i+1])) sum=sum-number(s[i]); else sum=sum+number(s[i]); } sum=sum+number(s[i]); return sum;}int main(){ char s[20]; scanf("%s",s); printf("%d\n",romanToInt(s)); return 0;}
后来我想着太麻烦了,可以改进,因为字母优先级和它的数字是对应的,越大优先级越高,所以用一个函数就可以了,然后再循环的时候吧strlen也去掉,时间确实减少了不少。
#include<stdio.h>#include<string.h>int number(char a){ switch(a) { case'I':return 1;break; case'V':return 5;break; case'X':return 10;break; case'L':return 50;break; case'C':return 100;break; case'D':return 500;break; case'M':return 1000;break; default:return 0;break; }}int romanToInt(char* s) { int sum=0,i; for(i=0;s[i];i++) { if(s[i+1]&&(number(s[i])<number(s[i+1]))) sum=sum-number(s[i]); else sum=sum+number(s[i]); } return sum;}int main(){ char s[20]; scanf("%s",s); printf("%d\n",romanToInt(s)); return 0;}
0 0
- 13. Roman to Integer
- 13.Roman to Integer
- 13. Roman to Integer
- 13.Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- 13. Roman to Integer
- SQL_数据库基础试题(培训/已完结)
- 909422229__Mysql查询语句基本用法总结
- 程序猿媳妇儿注意事项
- stm32通过SPI与adc124s021通信读取ad
- POJ 3311 Hie with the Pie(状态压缩DP)
- 13. Roman to Integer
- Ajax-serialize()方法
- HDU 1702 (栈和队列的模拟)
- Openstack Manila源码阅读笔记(一)manilaclient调用过程
- ubuntu安装cuda6.5
- 【家谱】项目开发总结
- QEMU和QEMU-KVM的关系
- leetcode 278 First Bad Version C++
- UVA-101 The Blocks Problem