【计蒜客】整数转换成罗马数字

本文详细介绍了一种将整数转换为罗马数字的算法实现,通过使用字符数组和整型数组存储对应值,循环判断并输出罗马数字,特别处理了如4、9等特殊情况。

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

给定一个整数 numnumnum,将整数转换成罗马数字。

如 1,2,3,4,51,2,3,4,51,2,3,4,5 对应的罗马数字分别为IIIIIIIVV等,更详细的说明见此 链接

输入格式

第一行输入一个整数 num(1≤num≤3999)num(1 \leq num \leq 3999)num(1≤num≤3999)。

输出格式

输出 numnumnum 对应的罗马数字。

样例输入

123

样例输出

CXXIII
/*
思路:先要使用字符数组和整型数组把响应的值存进来,声明一个整型数组来存放输入的整数除以第一个整型数组的数值,

因为后面要循环输出多个同样的罗马数字(即是记录循环变量的次数)

对于题目中特殊要求的表示,比如400,900,40,  90, 4, 9 这些表示需要在循环中判断来进行输出,可

以观察发现整型数组记录的值如果存在着900,90,9这些,循环中判断到的这个数字和下一个数字一定是1和4,

则对应输出来的字符应该是这个数字对应的字符数组的前一个字符和下一个字符,还需要注意的是应该要减掉一

次循环的次数,因为下一次循环不用判断4这个数字,这是第一种情况,第二种情况是循环判断到的数字是4,

输出的应该是这个数字对应的字符数组的这个字符和下一个字符,其余的情况就是循环输出整型数组存放数字对

应的次数的字符(这样的规律可以通过从控制台中输出各个数组中的内容然后自己寻找规律就可以了)

总结一下:感觉最重要的是要找出规律,然后循环中判断输出就可以了(在调试的时候可以进行观察) 

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

 	字符     数值
 	I       1
 	V       5
 	X 	10
 	L       50
 	C       100
 	D       500
 	M       1000
 */

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		char[] arr = { 'I', 'V', 'X', 'L', 'C', 'D', 'M' };
		int[] shu = { 1, 5, 10, 50, 100, 500, 1000 };
		int[] newShu = new int[shu.length];
		for (int i = shu.length - 1; i >= 0; i--) {
			newShu[i] = num / shu[i];
			num = num % shu[i];
		}
		for (int i = shu.length - 1; i >= 0; i--) {
			if (newShu[i] == 1 && newShu[i - 1] == 4 && i >= 1) {
				System.out.print(""+arr[i - 1] + arr[i + 1]);
				i--;
			} else if (newShu[i] == 4) {
				System.out.print(arr[i] +""+ arr[i+1]);
			} else {
				for (int j = 0; j < newShu[i]; j++) {
					System.out.print(arr[i]);
				}
			}
		}
		sc.close();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值