12 Integer to Roman

本文介绍了一种将阿拉伯数字转换为罗马数字的算法实现,并提供了两个Java版本的示例代码。通过解析罗马数字的基本规则,文章详细说明了如何设计并实现这一转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

罗马数字的规则

基本字符IVXLCDM
对应的数字1510501005001000
  1. 相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
  2. 小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
  3. 小的数字、(限于 Ⅰ、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
  4. 正常使用时、连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外);
  5. 在一个数的上面画一条横线、表示这个数扩大 1000 倍。
    自己写的第一个版本
public class No12 {

    public static void main(String[] args) {
        System.out.println(intToRoman(9));
    }

    public static String intToRoman(int num) {

        String Roman = "";

        int M = num / 1000;
        num = num % 1000;
        for (int i = 0; i < M; i++) {
            Roman = Roman + "M";
        }

        int D = num / 500;
        num = num % 500;
        if (D == 0) {
            int C = num / 100;
            num = num % 100;
            if (C == 4)
                Roman = Roman + "CD";
            else
                for (int i = 0; i < C; i++) {
                    Roman = Roman + "C";
                }
        } else {
            int C = num / 100;
            num = num % 100;
            if (C == 4)
                Roman = Roman + "CM";
            else {
                Roman = Roman + "D";
                for (int i = 0; i < C; i++) {
                    Roman = Roman + "C";
                }
            }
        }

        int L = num / 50;
        num = num % 50;
        if (L == 0) {
            int X = num / 10;
            num = num % 10;
            if (X == 4)
                Roman = Roman + "XL";
            else
                for (int i = 0; i < X; i++) {
                    Roman = Roman + "X";
                }
        } else {
            int X = num / 10;
            num = num % 10;
            if (X == 4)
                Roman = Roman + "XC";
            else {
                Roman = Roman + "L";
                for (int i = 0; i < X; i++) {
                    Roman = Roman + "X";
                }
            }
        }

        int V = num / 5;
        num = num % 5;
        if (V == 0) {
            int I = num;
            if (I == 4)
                Roman = Roman + "IV";
            else
                for (int i = 0; i < I; i++) {
                    Roman = Roman + "I";
                }
        } else {
            int I = num;
            if (I == 4)
                Roman = Roman + "IX";
            else {
                Roman = Roman + "V";
                for (int i = 0; i < I; i++) {
                    Roman = Roman + "I";
                }
            }
        }
        return Roman;
    }
}

网上看到的第二个版本

public class No12_2 {

    public static void main(String[] args) {
        System.out.println(intToRoman(1234));
    }

    public static String intToRoman(int num) {

        int[] nums = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };

        String[] str = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX",
                "V", "IV", "I" };

        String Roman = "";

        for (int i = 0; i < nums.length; i++) {
            while (num >= nums[i]) {
                num = num - nums[i];
                Roman = Roman + str[i];
            }
        }

        return Roman;
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值