Integer to Roman

本文介绍了将整数转换为罗马数字的方法,详细解释了罗马数字的规则及其编码实现。通过递归的方式,针对不同的数值范围提供了对应的转换逻辑。

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

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

解决这道题目的关键在于了解罗马数字的规则。罗马数字共有7个,即I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。相同的1个罗马数字重复几次,就表示这个数的几倍。例如III为3,并且重复的数字不能超过三位。另外一个规则是右加左减规则:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。但是,左减不能跨越一个位数。比如,99不可以用IC表示,而是用XCIX表示。此外,左减数字不能超过1位,比如8写成VIII,而非IIX。同理,右加数字不能超过3位,比如14写成XIV,而非XIIII。

我们用递归来解决这个问题,代码如下:

public class Solution {
public String intToRoman(int num) {
if(num == 0) return "";
if(num >= 1000) return "M" + intToRoman(num - 1000);
if(num >= 900) return "CM" + intToRoman(num - 900);
if(num >= 500) return "D" + intToRoman(num - 500);
if(num >= 400) return "CD" + intToRoman(num - 400);
if(num >= 100) return "C" + intToRoman(num - 100);
if(num >= 90) return "XC" + intToRoman(num - 90);
if(num >= 50) return "L" + intToRoman(num - 50);
if(num >= 40) return "XL" + intToRoman(num - 40);
if(num >= 10) return "X" + intToRoman(num - 10);
if(num >= 9) return "IX" + intToRoman(num - 9);
if(num >= 5) return "V" + intToRoman(num - 5);
if(num >= 4) return "IV" + intToRoman(num - 4);
if(num >= 1) return "I" + intToRoman(num - 1);
return "";
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值