LeetCode12. Integer to Roman

本文介绍了一种将整数转换为罗马数字的方法,并通过具体示例详细解释了转换过程中的关键步骤。文中还提供了一段Java代码实现,帮助读者更好地理解这一转换逻辑。

题目

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

For example, two is written as II in Roman numeral, just two one’s added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:
I can be placed before V (5) and X (10) to make 4 and 9.
X can be placed before L (50) and C (100) to make 40 and 90.
C can be placed before D (500) and M (1000) to make 400 and 900.

Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.

Example 1:

Input: 3
Output: “III”

Example 2:

Input: 4
Output: “IV”

Example 3:

Input: 9
Output: “IX”

Example 4:

Input: 58
Output: “LVIII”
Explanation: L = 50, V = 5, III = 3.

Example 5:

Input: 1994
Output: “MCMXCIV”
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.


罗马字符MDCLXVI
对应数字1000500100501051

可以举一些例子来发现规律
100 -> C
200 -> CC
300 -> CCC
400 -> CD
500 -> D
600 ->DC
700 -> DCC
800 -> DCCC
900 -> CM

因为D(500)、L(50)、V(5) 他们本身并不能放在比他们大的数的左边或右边 来表示对应的减或加。可以认为只是用来"简化"、"辅助"的。
如:D(500)、C(100)、L(50)
CCCC --> CD
CCCCC --> D

这道题所表示的数字的范围为[1 - 3999]
可以依次除1000,100,10,还要记得取余,得到对应位数的数字。
根据得到的值,可以分为几种情况:
1-3:只需重复对应次数(eg:300 -> CCC)
100 -> C
200 -> CC
300 -> CCC
4: 这个字符(对应的 千位、百位、个位)+ 上一个字符(用来简化对应的位的)
400 -> CD
5-8:上一个字符 + 这个字符(减去5的值则是对应重复的次数)
500 -> D
600 ->DC
700 -> DCC
800 -> DCCC
9:这个字符 + 前两个字符
900 -> CM

java 代码

public String intToRoman(int num) {
        String result = "";
		char[] roman = {'M','D','C','L','X','V','I'};
		int[] value = {1000,500,100,50,10,5,1};
		for(int i = 0; i < 7; i += 2) {
			int t = num / value[i];
			if(t < 4) {
				for(int j = 0; j < t; j++) result += roman[i];
			}else if(t == 4) {
				result = result + roman[i] + roman[i-1];
			}else if(t > 4 && t < 9) {
				result = result + roman[i-1];
				for(int j = 0; j < t - 5; j++) result = result + roman[i];
			}else if(t == 9) {
				result = result + roman[i] + roman[i-2];
			}
			num %= value[i];
		}
		return result;
		

参考文章:
https://www.cnblogs.com/grandyang/p/4123374.html

多角色体系 支持管理员、商家、消费者三种角色,权限分级管控: 管理员:负责平台整体配置、用户审核、数据监控等全局操作。 商家:管理店铺信息、发布商品、处理订单、回复评价等。 消费者:浏览商品、加入购物车、下单支付、评价商品等。 实现用户注册(手机号 / 邮箱验证)、登录(支持密码 / 验证码 / 第三方登录)、个人信息管理(头像、收货地址、密码修改)。 权限精细化控制 商家仅能管理自家店铺及商品,消费者仅能查看和购买商品,管理员拥有全平台数据访问权限。 二、商品管理功能 商品信息维护 商家可发布商品:填写名称、分类(如服饰、电子产品)、子类别(如手机、笔记本)、规格(尺寸、颜色、型号)、价格、库存、详情描述(图文)、物流信息(运费、发货地)等。 支持商品上下架、库存调整、信息编辑,系统自动记录商品状态变更日志。 商品分类与搜索 按多级分类展示商品(如 “数码产品→手机→智能手机”),支持自定义分类体系。 提供智能搜索功能:按关键词(名称、品牌)搜索,支持模糊匹配和搜索联想;结合用户浏览历史对搜索结果排序(优先展示高相关度商品)。 商品推荐 基于用户浏览、收藏、购买记录,推荐相似商品(如 “浏览过该商品的用户还买了…”)。 首页展示热门商品(销量 TOP10)、新品上架、限时折扣等推荐列表。 三、订单与交易管理 购物车与下单 消费者可将商品加入购物车,支持修改数量、选择规格、移除商品,系统自动计算总价(含运费、折扣)。 下单流程:确认收货地址→选择支付方式(在线支付、货到付款)→提交订单→系统生成唯一订单号。 订单处理流程 订单状态跟踪:待支付→已支付→商家发货→物流运输→消费者收货→订单完成,各状态变更实时通知用户。 商家端功能:查看新订单提醒、确认发货(填写物流单号)、处理退款申请(需审核理由)。 消费者端功能:查看订单详情、追踪物流、申请退款 / 退货、确认收货。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值