LeetCode之13_Integer to Roman
2016-06-26 13:16
489 查看
题目原文:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
题意分析:
把一个给出的罗马数字转换成为阿拉伯数字表示的整数
解题时将罗马数字对应的阿拉伯数字依次转换出来并相加即可,需要注意,如果存在左边的罗马字符小于右边的罗马字符时,说明为减法的表达形式,需要特殊处理。
详情见代码。
解题代码:
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"}. // 罗马数字转换为阿拉伯数字的表达方式,,范围从1到4000 #include <iostream> #include <string> using namespace std; class Solution { public: //分解给出的字符串,并依此进行解析 int romanToInt(string s) { int nRet = 0; int nBefore = 10000; int nNow = 0; for (int i=0; i< s.length(); i++) { nNow = getNumByRoman(s[i]); if (nNow <= nBefore) { nRet += nNow; nBefore = nNow; } else nRet = nRet + nNow - 2*nBefore; } return nRet; } //根据罗马字符返回阿拉伯数字 int getNumByRoman(char szRoman) { int nRet =0; switch(szRoman) { case 'I': nRet = 1; break; case 'V': nRet = 5; break; case 'X': nRet =10; break; case 'L': nRet = 50; break; case 'C': nRet =100; break; case 'D': nRet = 500; break; case 'M': nRet =1000; break; } return nRet; } };
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PostgreSQL ERROR: invalid escape string 解决办法
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析