将非负十进制整数n转换成b进制。(其中b=2~16)
要求实现递归和非递归两种方法
本代码采用数学上 ‘数除以进制取余的方法’ 将余数从后往前存入一个String变量,来实现进制的转换
public class Test {
//主函数
public static void main(String[] args) {
JS j=new JS();
Scanner in=new Scanner(System.in);
System.out.print("请输入要转化的十进制数:");
int n=in.nextInt();
System.out.print("请输入要转化的进制(2-16):");
int x=in.nextInt();
while(x<2||x>16) {
System.out.print("输入进制错误,请输入2-16之中的进制:");
x=in.nextInt();
}
System.out.println("递归方法:");
j.digui(n,x);
System.out.println("非递归方法:");
j.feidigui(n,x);
in.close();
}
}
class JS{
String a="";//存储递归方法转换后的值
String b="";//存储非递归方法转换后的值
//递归求解
void digui(int n,int x) {
String s=String.valueOf(n%x);
switch(s) {
case "10":
s="A";break;
case "11":
s="B";break;
case "12":
s="C";break;
case "13":
s="D";break;
case "14":
s="E";break;
case "15":
s="F";break;
}
if(n<x) {
a=s+a;
System.out.println("转化为"+x+"进制为:"+a);
}
else {
a=s+a;
digui(n/x,x);
}
}
//非递归求解
void feidigui(int n,int x) {
while(n!=0) {
String s=String.valueOf(n%x);
switch(s) {
case "10":
s="A";break;
case "11":
s="B";break;
case "12":
s="C";break;
case "13":
s="D";break;
case "14":
s="E";break;
case "15":
s="F";break;
}
b=s+b;
n=n/x;
}
System.out.println("转化为"+x+"进制为:"+b);
}
}