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

题目:将非负十进制整数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时要用字母表示,因此应该用%,结果刚开始没想这么仔细直接写成了除运算运行结果一直有误,检查了几次才发现这个问题,对递归树的熟悉度不够。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您可以按照以下步骤执行: 1. 将十进制整数存储到队列中,可以使用链式队列实现。 2. 从队列头部取出整数行八转换,将八数字存储到另一个队列中。 3. 重复步骤2,直到原队列为空。 4. 依次从八结果队列中取出数字,输出即可。 下面是一个简单的示例代码,仅供参考: ```python # 定义链式队列节点 class Node: def __init__(self, data=None, next=None): self.data = data self.next = next # 定义链式队列 class Queue: def __init__(self): self.head = None self.tail = None def is_empty(self): return self.head is None def enqueue(self, data): node = Node(data) if self.tail is None: self.head = node self.tail = node else: self.tail.next = node self.tail = node def dequeue(self): if self.is_empty(): return None else: node = self.head self.head = node.next if self.head is None: self.tail = None return node.data # 将十进制整数转换数 def decimal_to_octal(decimal): octal = '' while decimal > 0: octal = str(decimal % 8) + octal decimal //= 8 return octal if octal else '0' # 将十进制整数转换数并输出 def convert_and_output(decimal): q1 = Queue() # 存储十进制整数 q2 = Queue() # 存储八数 q1.enqueue(decimal) while not q1.is_empty(): num = q1.dequeue() octal = decimal_to_octal(num) q2.enqueue(octal) while not q2.is_empty(): octal = q2.dequeue() print(octal, end=' ') # 测试 convert_and_output(12345) # 输出: 30071 ``` 希望能帮到您!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值