将非负十进制整数n转换成b进制。

该博客详细介绍了如何将非负十进制整数转换为2到16之间的任意进制,分别通过递归和非递归两种方法实现。递归方法中定义了递归出口和递归体,非递归方法使用while循环进行转换。博主提供了Java代码示例,并进行了功能测试,确保程序的健壮性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:题目要求

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

1采用递归思想编程解决问题,要求设计出递归模型(递归出口和递归体的函数式)。

2程序设计风格良好,实现功能测试代码,确保程序的健壮性。

3画出递归树或者递归栈的调用过程。

4实现非递归方法。

二:设计思路和递归栈

1 递归方法

  递归出口 if(n<b);

  递归公式 当n>b时,recursion(n/b,n);

2 非递归方法

  运用while循环,当n=0时跳出循环否则进行运算。

递归栈:

以6的二进制为例

递归的层次

递归栈的状态(n的值)

说明

1

recursion(6)

第一次递归入栈

2

recursion(3)

recursion(6)

由第一层进入第二层

第二次递归,入栈

3

recursion(1)

recursion(3)

recursion(6)

由第二层进入第三层

第三次递归,入栈

4

recursion(0)

recursion(1)

recursion(3)

recursion(6)

由第三层进入第四次递归,进入第四次递归,入栈

5

recursion(1)

recursion(3)

recursion(6)

得recursion(0)的值,出栈

6

recursion(3)

recursion(6)

得recursion(1)的值,出栈

7

recursion(6)

得recursion(3)的值,出栈

8

栈空

得recursion(6)的值,出栈

package jinzhi;
import java.util.*;

class calculate{
    String a="";
    //递归方法
    void recursion(int n,int b) {
        String s=String.valueOf(n%b); //将int型转换为string型
        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<b) {
            a=s+a;
            System.out.println("转换为"+b+"进制为:"+a);
        }
        else {
            a=s+a;
            recursion(n/b,b);
        }
    }
    String c="";
    //非递归方法
    void nonrecursion(int n,int b){
        while(n!=0) {
            String s=String.valueOf(n%b);
            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;
            }
            c=s+c;
            n=n/b;
        }
        System.out.println("转换为"+b+"进制为:"+c);
    }
}
public class shuzhi {
    public static void main(String[] args) {
        calculate A=new calculate();
        Scanner in=new Scanner(System.in);
        System.out.println("请输入十进制数:");
        int n=in.nextInt();
        System.out.println("请输入要转换的进制:");
        int b=in.nextInt();
        while(b<2||b>16) {
            System.out.print("输入错误,请输正确进制(2-16):");
            b=in.nextInt();
        }
        System.out.println("递归方法:");
        A.recursion(n,b);
        System.out.println("非递归方法:");
        A.nonrecursion(n,b);
        in.close(); //关闭输入流 释放内存 
    }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值