算法第八次作业
来源:互联网 发布:手机淘宝红包怎么领取 编辑:程序博客网 时间:2024/05/17 09:31
题目:Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
解析:
这道题第一点告诉我们的是:一定要学好英语~!roman numeral是罗马数字的意思。
第二点就是要见多识广,比如了解罗马数字构成(比如会百度百科)
题目本身不难,主要是在对罗马数字的理解上。比如大于3000的数字,先是千位,有num_M个M;然后在【900,1000)范围内加一个CM,剩下的899以内根据D(500)/CD(400)再进行划分!
代码:
class Solution {public: string intToRoman(int num) { string str; int num_M=num/1000; for(int i=0;i<num_M;i++) str+='M'; num=num%1000; if(num>=900){ str+="CM"; num-=900; } if(num>=400){ if(num<500){ str+="CD"; num-=400; }else{ str+='D'; num-=500; } } int num_C=num/100; for(int j=0;j<num_C;j++){ str+='C'; } num=num%100; if(num>=90){ str+="XC"; num-=90; } if(num>=40){ if(num<50){ str+="XL"; num-=40; }else{ str+='L'; num-=50; } } int num_X=num/10; for(int k=0;k<num_X;k++) str+='X'; num=num%10; if(num==9)//后面实在不想再动脑了 str+="IX"; if(num==8) str+="VIII"; if(num==7) str+="VII"; if(num==6) str+="VI"; if(num==5) str+="V"; if(num==4) str+="IV"; if(num==3) str+="III"; if(num==2) str+="II"; if(num==1) str+="I"; return str; }};
然而,官网上有大神给出了一种极其精简的方法
public static String intToRoman(int num) { String M[] = {"", "M", "MM", "MMM"}; String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];}
其实思想是类似的,不过它巧妙地运用String类,膜拜!
阅读全文
0 0
- 算法第八次作业
- 算法与数据结构第八次作业 count1
- 算法与数据结构第八次作业 count2
- 第八次上机作业
- 第八次课堂作业
- 第八次上机作业
- 第八次作业--JSTL
- 第八次作业
- 第八次作业
- 第八次java作业
- HTML5 第八次作业
- 第八次作业
- 第八次作业
- 第八次作业
- c++第八次上机作业
- 补、C++第八次作业
- python自学-第八次作业
- 第八次作业,成绩排序。
- webpack配置文件解读
- 虚拟机的网络连接的桥接模式、NAT模式、仅主机模式简单解说
- 二进制相关的位运算
- 利用AppIntro快速制作一个app启动页
- Bean实例的创建方式及依赖配置
- 算法第八次作业
- 点亮细胞281-290
- CSerialPort串口类最新修正版2017-03-12
- Python中的函数
- How Many Zeroes? (数位dp)
- 点亮细胞291-300
- EXTjs 引用
- 第二次系统学习css
- Python数据类型