将非负十进制整数n转换成b进制。(其中b=2~16)

一.题目
将非负十进制整数n转换成b进制。(其中b=2~16)
要求:
1.采用递归思想编程解决问题,要求设计出递归模型(递归出口和递归体的函数式)。
2.程序设计风格良好,实现功能测试代码,确保程序的健壮性。
3.画出递归树或者递归栈的调用过程。
4.实现非递归方法。
二.算法设计
将十进制n转换成任意进制b的方法是:n除以b取余作为转换后的数的最低位,在商不为0的情况下,则商继续除以b,取余作为次低位,直到商为0为止。定义一个有两个参数的递归函数digui(n,b)。其中,n表示进行转换的数字,b表示进制。
在这里插入图片描述
递归代码:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
当n=5,b=2时,上述递归算法的递归栈过程示意图为:

在这里插入图片描述
在这里插入图片描述
三、代码
递归:

public class digui {
 public String digui(int n,int b) {
  String s=new String();//存储递归方法转换后的值
  if(n==0){//递归出口
   return s;
  }
  else{
   int i=n%b;
   switch(i) {
     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=i+s;
     }
   s=digui(n/b,b)+s;
   return s;
  }
 }
}

非递归:

public class feidigui{
 public String feidigui(int n,int b) {
  String s=new String();//存储递归方法转换后的值
  if(n==0){
   return s;
  }
  while(n!=0){
   int i=n%b;
   n=n/b;
   switch(i) {
     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=i+s;
     }
  }
  return s;
 }
}

测试:

public class Test {
 public static void main(String[] args) {
  digui dg=new digui();
  feidigui fdg=new feidigui();
  Scanner sc=new Scanner(System.in);
     System.out.println("请输入你想要转换的非负十进制整数:");
  int n=sc.nextInt();
  while(n<0){
   System.out.println("输入错误!请重新输入你想要转换的非负十进制数:");
   n=sc.nextInt();
  }
  System.out.println("请输入你要转换的进制(2~16):");
  int b=sc.nextInt();
  while(b<2||b>16){
   System.out.println("输入错误!请重新输入你要转换的进制(2~16):");
   b=sc.nextInt();
  }
  sc.close();
  System.out.println("递归方法:");
  String s=dg.digui(n,b);
  System.out.println("十进制数"+n+"转化为"+b+"进制为:"+s);
  System.out.println("非递归方法:");
  String s1=fdg.feidigui(n,b);
  System.out.println("十进制数"+n+"转化为"+b+"进制为:"+s1);  
 }
}

四、测试截图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值