给定一个整数 numnumnum,将整数转换成罗马数字。
如 1,2,3,4,51,2,3,4,51,2,3,4,5 对应的罗马数字分别为I
,II
,III
,IV
,V
等,更详细的说明见此 链接。
输入格式
第一行输入一个整数 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();
}
}