Integer to Roman
2015-07-21 00:45
369 查看
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
这道题直接上来硬写的,感觉有点没动脑筋。想起当时用java课上一道关于扑克牌的课后作业,应该写的灵活些。像本题,如果还需要写出后续的数字这种写法就不妥当了。我想到的一个办法是:在个位,十位,百位使用一个for循环,因为他们的逻辑是一模一样的,除了字母不同,那么便可以用一个二位数组存好这些字母,按规则打印即可。
以下是不聪明的写法:
Input is guaranteed to be within the range from 1 to 3999.
这道题直接上来硬写的,感觉有点没动脑筋。想起当时用java课上一道关于扑克牌的课后作业,应该写的灵活些。像本题,如果还需要写出后续的数字这种写法就不妥当了。我想到的一个办法是:在个位,十位,百位使用一个for循环,因为他们的逻辑是一模一样的,除了字母不同,那么便可以用一个二位数组存好这些字母,按规则打印即可。
以下是不聪明的写法:
package leetcode; public class Int2Roman { // I V X L C D M // 1 5 10 50 100 500 1000 public static void main(String[] args) { Int2Roman int2r = new Int2Roman(); int2r.intToRoman(2500); System.out.println(); int2r.intToRoman(735); System.out.println(); int2r.intToRoman(14); } public String intToRoman(int num) { // 1-3999 int temp = num; int split[] = new int[4]; int point = 0; // 反序存这个数字 while (temp > 0) { split[point] = temp % 10; temp = temp / 10; point++; } /* * for (int i : split) { System.out.println(i); } */ String res = ""; // 千位 if (split[3] != 0) { // 如果是减法 // 如果是加法 1-3 for (int j = 0; j < split[3]; j++) { res += "M"; } } //百位 if (split[2] != 0) { // 如果是加法 1-3 if(split[2]<=3){ for (int j = 0; j < split[2]; j++) { res += "C"; } } // 如果是加法 5-8 if(split[2]>=5 && split[2]<=8){ res+="D"; for(int j=split[2]-5;j>0;j--) res+="C"; } // 如果是减法 if(split[2]==9){ res+="CM"; } if(split[2]==4){ res+="CD"; } } //十位 if (split[1] != 0) { // 如果是减法 // 如果是加法 1-3 if(split[1]<=3){ for (int j = 0; j < split[1]; j++) { res += "X"; } } // 如果是加法 5-8 if(split[1]>=5 && split[1]<=8){ res+="L"; for(int j=split[1]-5;j>0;j--) res+="X"; } if(split[1]==9){ res+="XC"; } if(split[1]==4){ res+="XL"; } } //个位 if (split[0] != 0) { // 如果是减法 // 如果是加法 1-3 if(split[0]<=3){ for (int j = 0; j < split[0]; j++) { res += "I"; } } // 如果是加法 5-8 if(split[0]>=5 && split[0]<=8){ res+="V"; for(int j=split[0]-5;j>0;j--) res+="I"; } if(split[0]==9){ res+="IX"; } if(split[0]==4){ res+="IV"; } } System.out.println("res:" + res); return res; } }
相关文章推荐
- 2015年07月21日第12天笔记
- 多层的if循环
- 自定义相机
- Xcode常用快捷键
- HTTP协议:pipeline、持久连接、非持久连接
- 不重启VMWare虚拟机添加虚拟磁盘的方法(上)
- 结构体3 使用函数赋值
- Java基础总结(一)
- 纪录: INNER JOIN,LEFT JOIN 之解惑
- 字符串转换成数字以及注意事项
- 欢迎使用CSDN-markdown编辑器
- 在数据库的设计中,外键(Foreign key)约束是否真的有必要呢?(一)
- 20_Android中apk安装器,通过WebView来load进一个页面,Android通知,程序退出自动杀死进程,通过输入包名的方式杀死进程
- Android Day05-网络编程之提交数据
- 20_Android中apk安装器,通过WebView来load进一个页面,Android通知,程序退出自动杀死进程,通过输入包名的方式杀死进程
- BC400-Unit3:Basic ABAP Language Elements
- ZOJ 3790 Consecutive Blocks(迟取法)
- Activity的几种启动模式介绍
- Ubuntu在图形化向导下的安装
- HDUOJ1095