LeetCode:12. Integer to Roman(Medium)

1. 原题链接

https://leetcode.com/problems/integer-to-roman/description/

2. 题目要求

(1) 将整数转换成罗马数字; (2) 整数的范围1-3999

3. 关于罗马数字

  (1)对应整数

罗马数字IVXLCDM
对应整数1510501005001000

 

 

 

(2)罗马数字的书写规则

  • 相同的数字连写, 所表示的数等于这些数字相加得到的数。如 XXX表示 30
  • 小的数字在大的数字的右边, 所表示的数等于这些数字相加得到的数 如VIII 表示8
  • 小的数字(限于I, X, C)在大的数字的左边, 所表示的数等于大数减去小的数: 如IV 表示4
  • 在一个数的上面画一条横线, 表示这个数增值1000倍(由于题目只考虑4000以内的数,所以这条规则不用考虑)。

(3)罗马数字的组合规则

  • I, X, C: 最多只能连用3个, 如果放在大数的左边,只能用1个。
  • V, L, D: 不能放在大数的左边,只能使用一个。
  • I 只能用在V和X的左边。 IV表示4, IX表示9
  • X只能放在L,C左边。 XL 表示40, XC表示90
  • C放在左边时只能用在D, M左边。 CD 表示400, CM表示900

4. 解题思路

(1)找出所给整数每一位上对应的罗马数字。例如给出整数2307,千位上为2,2000对应罗马数字MM;百位上为3,300对应罗马数字CCC;个位上为7,7对应的罗马数字为VII,故可的2307对应的罗马数字为MMCCCVII。

(2)于是我们要列出不同位上、不同数字对应的罗马数字:

千位上的数字0123
对应罗马数字 MMMMMM

  

 

 

百位上的数字0123456789
对应罗马数字 CCCCCCCDDDCDCCDCCCCM

 

 

 

十位上的数字0123456789
对应罗马数字 XXXXXXXLLLXLXXLXXXXC

 

 

 

个位上的数字0123456789
对应罗马数字 IIIIIIIVVVIVIIVIIIIX

 

 

 

5. 代码实现

 1 package com.huiAlex;
 2 
 3 public class IntegerToRoman12 {
 4     public static void main(String[] args) {
 5         System.out.println(IntegerToRoman12.intToRoman(999));
 6     }
 7     public static String intToRoman(int num) {
 8         String M[] = {"", "M", "MM", "MMM"};  // 千位上对应的罗马数字
 9         String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};  // 百位上对应的罗马数字
10         String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};  // 十位上对应的罗马数字
11         String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};  // 个位上对应的罗马数字
12         
13         return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10];
14     }
15 }

 

转载于:https://www.cnblogs.com/huiAlex/p/8064493.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值