码迷,mamicode.com
首页 > 编程语言 > 详细

【算法】【LeetCode】整数转罗马数字

时间:2020-02-25 16:05:50      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:ems   public   官方   字符   nbsp   problem   ret   工作量   整数   

题目:

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

示例 1:

输入: 3
输出: "III"
示例 2:

输入: 4
输出: "IV"
示例 3:

输入: 9
输出: "IX"
示例 4:

输入: 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
示例 5:

输入: 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/integer-to-roman
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

代码:

 1     public String intToRoman(int num)
 2     {
 3         if (num < 1 || num > 3999)
 4         {
 5             return null;
 6         }
 7 
 8         String romanNumStr = "";
 9         String[] arr01 =
10         { "I", "X", "C", "M", "" };
11         String[] arr02 =
12         { "V", "L", "D", "" };
13 
14         for (int i = 0; i < 4; i++)
15         {
16             String c1 = arr01[i];
17             String c2 = arr02[i];
18             String c3 = arr01[i + 1];
19 
20             String str = "";
21 
22             int c = num % 10;
23             num /= 10;
24             if (c <= 3)
25             {
26                 while (c > 0)
27                 {
28                     str += c1;
29                     c--;
30                 }
31             } else if (c == 4)
32             {
33                 str = c1 + c2;
34             } else if (c == 5)
35             {
36                 str = c2;
37             } else if (c < 9)
38             {
39                 str = c2;
40                 c -= 5;
41                 while (c > 0)
42                 {
43                     str += c1;
44                     c--;
45                 }
46             } else if (c == 9)
47             {
48                 str = c1 + c3;
49             }
50 
51             romanNumStr = str + romanNumStr;
52         }
53 
54         return romanNumStr;
55     }

 

说明:这样靠多层else if来判断代码看起来有点累赘,还有一种方法是将罗马数字可能的所有组合放到一个数字里,然后直接取余判断后拿来拼接即可,但是把所有可能性组成一个数组也挺麻烦的,所以相较来看工作量熟大熟小不好说

【算法】【LeetCode】整数转罗马数字

标签:ems   public   官方   字符   nbsp   problem   ret   工作量   整数   

原文地址:https://www.cnblogs.com/suzi2019/p/12362144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!