Roman to Integer
2016-07-23 21:51
197 查看
Description:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
分析:
1~9: {“I”, “II”, “III”, “IV”, “V”, “VI”, “VII”, “VIII”, “IX”};
10~90: {“X”, “XX”, “XXX”, “XL”, “L”, “LX”, “LXX”, “LXXX”, “XC”};
100~900: {“C”, “CC”, “CCC”, “CD”, “D”, “DC”, “DCC”, “DCCC”, “CM”};
1000~3000: {“M”, “MM”, “MMM”}.
从前往后扫描,用一个临时变量记录分段数字。
如果当前比前一个大,说明这一段的值应该是当前这个值减去上一个值。比如
则,将当前值加入到结果中,然后开始下一段记录。比如 VI = 5 + 1, II=1+1。
代码:
测试:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
分析:
1~9: {“I”, “II”, “III”, “IV”, “V”, “VI”, “VII”, “VIII”, “IX”};
10~90: {“X”, “XX”, “XXX”, “XL”, “L”, “LX”, “LXX”, “LXXX”, “XC”};
100~900: {“C”, “CC”, “CCC”, “CD”, “D”, “DC”, “DCC”, “DCCC”, “CM”};
1000~3000: {“M”, “MM”, “MMM”}.
从前往后扫描,用一个临时变量记录分段数字。
如果当前比前一个大,说明这一段的值应该是当前这个值减去上一个值。比如
则,将当前值加入到结果中,然后开始下一段记录。比如 VI = 5 + 1, II=1+1。
代码:
#include <iostream> using namespace std; int map(const char c) //罗马字符到整数的映射 { switch (c) { 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; default: return 0; } } int RomanToInteger(string &roman) { int result = 0; for (int i = 0; i < roman.size(); i++) { if (i > 0 && (roman[i] > roman[i-1])) result += (map(roman[i]) - 2*map(roman[i-1])); else result += map(roman[i]); } return result; } int main(int argc, char const *argv[]) { string roman = "VII"; string roman2 = "IX"; string roman3 = "DCC"; std::cout << RomanToInteger(roman) << std::endl; std::cout << RomanToInteger(roman2) << std::endl; std::cout << RomanToInteger(roman3) << std::endl; return 0; }
测试:
相关文章推荐
- 寻找Coder(toupper 的用法)--------去哪儿2015研发工程师笔试题
- 关于CUDA实现最值问题
- POJ3438 ZOJ2886 UVALive3822 Look and Say【数列+水题】
- Dialog源码分析
- 组合问题与动态规划的联系之应用
- 适配器(一)
- Log4Net使用详解
- poj1703 并查集
- 关键字、结构体总结以及typedef,枚举与#define区别
- 8086汇编语言自学经验分享 除数16位的DIV指令
- (linux)idr(integer ID management)机制
- Understanding HDFS Recovery Processes (Part 2)
- HDU 1372 BFS
- grails数据库部署
- 二分查找算法的C++和Python实现
- 个人博客搭建之旅
- ggplot2 geom相关设置—分布图
- Linux系统常用命令(咋个办呢 zgbn)
- 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法
- 7.14 编一个程序,将两个字符串s1和s2进行比较。