题目
将非负十进制整数n转换成b进制。(其中b=2~16)
要求
- 采用递归思想编程解决问题,要求设计出递归模型(递归出口和递归体的函数式)。
- 程序设计风格良好,实现功能测试代码,确保程序的健壮性。
- 画出递归树或者递归栈的调用过程
- 实先非递归算法
分析
1.转化思想
首先是n对b取商,再将商数赋值给n,然后再将所的与余数作为转化后的数的最低位,直到所去商为零为止。
当所取的进制的数大于10时,要将余数的10,11,12,13,14,15分别转化为A,B,,C,D,E,F
2.递归实现
递归出口:if(b/n=0)
递归体:Digui(n/b,n);
import java.util.Scanner;
public class Jinzhi{
public static void Digui(int n,int b) { //递归实现
String s=new String();
if(n>0) {
switch(n%b) {
case 10:s="A"+s;break;
case 11:s="B"+s;break;
case 12:s="C"+s;break;
case 13:s="D"+s;break;
case 14:s="E"+s;break;
case 15:s="F"+s;break;
default:s=String.valueOf(n%b)+s;
}
}
if(n!=0) {
Digui(n/b,b);
}
System.out.print(s);
}
/*public static void FDigui(int n,int b) { //非递归实现
String s=new String();
while(n>0) {
switch(n%b) {
case 10:s="A"+s;break;
case 11:s="B"+s;break;
case 12:s="C"+s;break;
case 13:s="D"+s;break;
case 14:s="E"+s;break;
case 15:s="F"+s;break;
default:s=String.valueOf(n%b)+s;
}
n/=b;
}
System.out.print(s);
}
*/
public static void main(String[] args) {
int n,b;
String s;
Scanner sc=new java.util.Scanner(System.in);
System.out.println("请输入一个非负十进制整数:");
n=sc.nextInt();
while(true) {
if(n<0) {
System.out.println("输入错入,请重新输入:");
n=sc.nextInt();
}
else
break;
}
System.out.println("请输入需要转化的进制数(2-16):" );
b=sc.nextInt();
while(true) {
if(b<1||b>16){
System.out.println("输入错入,请重新输入:" );
b=sc.nextInt();
}
else
break;
}
System.out.println("递归实现:");
Digui(n,b);
sc.close();
/*System.out.println("非递归实现:");
FDigui(n,b);
sc.close();*/
}
}