Integer to Roman - Leetcode
来源:互联网 发布:软件设计师视频下载 编辑:程序博客网 时间:2024/06/17 00:05
题意:将整型数转换成罗马数字。(记得之前在户部巷玩,有路边摆摊的说一个不错的写出罗马数字1到100,礼品随便挑。做完这一题估计可以去试试了)
在做此题之前,需要弄清楚罗马数字的基本字符和规则。
1 5 10 50 100 500 1000
I V X L C D M
1.相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
2.小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
3.小的数字、(限于 Ⅰ、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
4.正常使用时、连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外);
5.在一个数的上面画一条横线、表示这个数扩大 1000 倍。
思路很简单,将数每一位分离,存入数组,然后一次求出每一位的罗马数字存入字符串,随后输出。
class Solution {public: string intToRoman(int num) { int number[4]; string s=""; for(int i=0;i<4;i++) number[i]=0; int i=0; while(num!=0) { number[i++]=num%10; num=num/10; } for(int j=0;j<i;j++) { if(j==0) { if(1<=number[j]&&number[j]<4) for(int k=0;k<number[j];k++) s.insert(0,"I"); else if(number[j]==4) s.insert(0,"IV"); else if(number[j]>4&&number[j]<9) { for(int k=1;k<=number[j]-5;k++) s.insert(0,"I"); s.insert(0,"V"); } else if(number[j]==9) s.insert(0,"IX"); } if(j==1) { if(1<=number[j]&&number[j]<4) for(int k=0;k<number[j];k++) s.insert(0,"X"); else if(number[j]==4) s.insert(0,"XL"); else if(number[j]>4&&number[j]<9) { for(int k=1;k<=number[j]-5;k++) s.insert(0,"X"); s.insert(0,"L"); } else if(number[j]==9) s.insert(0,"XC"); } if(j==2) { if(1<=number[j]&&number[j]<4) for(int k=0;k<number[j];k++) s.insert(0,"C"); else if(number[j]==4) s.insert(0,"CD"); else if(number[j]>4&&number[j]<9) { for(int k=1;k<=number[j]-5;k++) s.insert(0,"C"); s.insert(0,"D"); } else if(number[j]==9) s.insert(0,"CM"); } if(j==3) { if(1<=number[j]&&number[j]<4) for(int k=0;k<number[j];k++) s.insert(0,"M"); } } return s; }};
这种做法要对每种情况进行判断,比较麻烦,学习了网上一种比较简洁的做法。将特殊的需要标记出来的罗马数字先存入数组中,处理num的过程就是以此让num减去value中比num小的最大的数,然后把它对应的罗马数字存到字符串s中。
class Solution {public: string intToRoman(int num) { int values[13] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; string numerals[13] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; string result; for (int i = 0; i < 13; i++) { while (num >= values[i]) { num -= values[i]; result+=numerals[i]; } } return result; }};
0 0
- LeetCode Roman to Integer && Integer to Roman
- 【leetcode】Roman to Integer | Integer to Roman
- Leetcode - "Roman to Integer" & "Integer to Roman"
- LeetCode:Roman to Integer,Integer to Roman
- LeetCode Integer to Roman & Roman to Integer
- leetcode - roman to integer & integer to roman
- LeetCode:Roman to Integer
- LeetCode: Integer to Roman
- LeetCode: Roman to Integer
- LeetCode Integer to Roman
- LeetCode: Integer to Roman
- LeetCode : Roman to Integer
- [Leetcode] Roman to Integer
- [Leetcode] Integer to Roman
- Leetcode: Integer to Roman
- Leetcode: Roman to Integer
- LeetCode Integer to Roman
- 【leetcode】Roman to Integer
- Freemarker 内置函数 数字、字符串、日期格式化用法介绍
- 下拉列表框Spinner
- JS字符串大小写转换实现方式
- Android 6.0变化之休眠模式
- codeforces 589 C. Polycarp's Masterpiece
- Integer to Roman - Leetcode
- HashMap遍历方法
- 面向(过程、对象、组件、服务)编程
- scanf,cout
- eclipse中svn冲突解决
- java.lang.IllegalArgumentException: Negative time
- python学习手册二:元组的简介
- Android本地数据存储之Sharedpreference
- C++-----------------------------------------------------std::bind