本文主要是介绍整数转换为罗马数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:给定一个整数 num,将整数转换成罗马数字。
如 1,2,3,4,5 对应的罗马数字分别为I
,II
,III
,IV
,V
等,更详细的说明见此 链接。
输入格式
第一行输入一个整数 num(1≤num≤3999)。
输出格式
输出 num 对应的罗马数字。
样例输入
123
样例输出
CXXIII
思路:发现其实整数的个位,十位,百位等上的数字的转为规则是一致的,只是表示的字符不一样,个位的一是I,十位则是X,那么这里我用了一个每一位的数字转换,需要传递四个参数,第一个是位上的数字,第二个是位上对应的1,第三个参数是位上对应的5,第四个参数是进位的对应的1.详细的函数:
public static String getStr(int num,String a,String b,String c){//a代表该位的1,b代表5
String cat = "";
switch(num){
case 1:
case 2:
case 3:
for(int i=0;i<num;i++){
cat+=a;
}break;
case 4:
cat=a+b;break;
case 5:
cat=b;break;
case 6:
case 7:
case 8:
cat=b;
for(int i=0;i<num-5;i++){
cat+=a;
}
break;
case 9:
cat=cat+a+c;
break;
case 0:
break;
}
return cat;
}
接下来考虑到传参的便利,因为每一位上的数字都需要后面三个参数,那么个位对应的参数是I,V,X,十位对应的是X,L,C。用一个自定义类型来表示,然后用数组存储这个自定义类型会比较直观,方便。这里定义的是Domian类,名字起的不太好。Domain里面有三个成员变量a,b,c,对应上面的参数
最后就是转换的工作了,从高位到低位依次转换,并加入到一个总字符串,最终就可以得到结果。
关键函数:
public static String convert(String number,Domain []d){
int len=number.length();//字符串的长度
String total="";
for(int i=0;i<len;i++){
String charAt=number.charAt(i)+"";
String a= d[len-i-1].getA();
String b=d[len-i-1].getB();
String c=d[len-i-1].getC();
total=total+getStr(Integer.parseInt(charAt),a,b,c);
}
return total;
}
完整代码:
import java.util.Scanner;
class Domain{
private String a;
private String b;
private String c;
public Domain(){
}
public Domain(String a, String b, String c) {
super();
this.a = a;
this.b = b;
this.c = c;
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
}
public class 整数转换为罗马数字 {
public static String getStr(int num,String a,String b,String c){//a代表该位的1,b代表5
String cat = "";
switch(num){
case 1:
case 2:
case 3:
for(int i=0;i<num;i++){
cat+=a;
}break;
case 4:
cat=a+b;break;
case 5:
cat=b;break;
case 6:
case 7:
case 8:
cat=b;
for(int i=0;i<num-5;i++){
cat+=a;
}
break;
case 9:
cat=cat+a+c;
break;
case 0:
break;
}
return cat;
}
public static String convert(String number,Domain []d){
int len=number.length();//字符串的长度
String total="";
for(int i=0;i<len;i++){
String charAt=number.charAt(i)+"";
String a= d[len-i-1].getA();
String b=d[len-i-1].getB();
String c=d[len-i-1].getC();
total=total+getStr(Integer.parseInt(charAt),a,b,c);
}
return total;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String input=sc.nextLine();
Domain []d={new Domain("I","V","X"),new Domain("X","L","C"),new Domain("C","D","M"),
new Domain("M","","")
};
String result=convert(input, d);
System.out.println(result);
/* String result= getStr(6,"I","v","x");
System.out.println(result);*/
/*
for(int i=0;i<10;i++){
String result= getStr(i,"I","v","x");
System.out.println(result);
}*/
/* char a='a';
String s=a+"";
System.out.println(s);*/
}
}
这篇关于整数转换为罗马数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!