力扣12 数字转为罗马数字
  ts5SxE9jKU6l 2023年11月01日 51 0

力扣12 数字转为罗马数字

题目:

罗马数字包含以下七种字符: IVXLCDM

字符          数值
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:

输入: num = 3
输出: "III"

示例 2:

输入: num = 4
输出: "IV"

示例 3:

输入: num = 9
输出: "IX"

示例 4:

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

示例 5:

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

提示:

  • 1 <= num <= 3999

解题思路:

暂时没有想到什么好的解题思路,我们可以将个十百千位上的数值分别用罗马数字表示出来分别存储在四个数组中,然后求出所给数字的个十百千位上的数字,以所求出的数字分别在所对应的数组中取出对应的罗马数字然后进行拼接。

代码:

/**
 * 将一个整数转换为罗马数字要求整数范围在[1,3999]。
 * 我们可以分别用罗马数字将数字的个十百千位上的数值表示出来分别存储在不同的数组中,然后再分别求出数字的个十百千位上的数字分别在不同的数组中取值再相加。
 */
public class IntToLuoMa {
    public static void main(String[] args) {
        int num = 4;
        System.out.println("intToRuoMa(num) = " + intToRuoMa(num));
    }
    //1.定义一个方法返回一个整数的罗马数字,返回值类型位String参数类型位int
    public static String intToRuoMa(int num){
        //2.分别定义四个数组用罗马数字存储个十百千位上的数值
        String thousands[] = {"","M","MM","MMM"};
        String hundreds[] = {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
        String tens[] = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
        String ones[] = {"","I","II","III","IV","VI","VII","VIII","IX"};
        //3.分别求出所给数字的个十百千位
        //3.1千位
        int thousand = num / 1000;
        //3.2百位
        int hundred = num % 1000 /100;
        //3.3十位
        int ten = num % 100 / 10;
        //3.4个位
        int one = num % 10;
        //4.拼接个十百千位
        return thousands[thousand]+hundreds[hundred]+tens[ten]+ones[one];
    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  jTMfQq5cr55P   2024年05月17日   44   0   0 算法与数据结构
  jTMfQq5cr55P   2024年05月17日   40   0   0 算法与数据结构