题目:将非负十进制整数n转换成b进制。(其中b=2~16)
- 递归模型
递归函数为transform,设置有两个参数,第一个参数为需要转换的数(num),第二个为转换为几进制(n),将十进制数转化为其余进制时相除求余数将其输出,在转换为11—16进制时将10-15分别用ABCDEF进行输出,递归出口为num值为0时。
0 num=0
transform(num,n)=
Transform(num/n) num!=0
- 源代码:
-
import java.util.Scanner; public class change { public static void main(String args[]) { int flag=1; while(flag==1) { Scanner i=new Scanner(System.in); System.out.println("请输入你想要进行转换的数:"); int a=i.nextInt(); System.out.println("请输入您选择的进制:"); int b=i.nextInt(); transform(a,b); System.out.println(); System.out.println("如果继续查询请按1,按0退出该查询"); int f=i.nextInt(); flag=f; } } public static void transform(int num,int n) { if(num==0) { return; } else { transform(num/n,n); if(n>10) { if(num%n>=10) { switch(num%n) { case 10:System.out.print("A"+" ");break; case 11:System.out.print("B"+" ");break; case 12:System.out.print("C"+" ");break; case 13:System.out.print("D"+" ");break; case 14:System.out.print("E"+" ");break; case 15:System.out.print("F"+" ");break; default:break; } } else { System.out.print(num%n+" "); } } else { System.out.print(num%n+" "); } } } }
运行结果:
-
-
调试截图
-
-
实验心得:
这次实验的问题出在“%”“/”的使用上,%是用来求余数,/求其商值,在函数递归时第一个的递归值应该是num/n用最后的商值来做递归,然后当与数值大于等于10时要用字母表示,因此应该用%,结果刚开始没想这么仔细直接写成了除运算运行结果一直有误,检查了几次才发现这个问题,对递归树的熟悉度不够。