用JAVA实现十进制转n进制

本文介绍了一种将十进制整数转换为2到16进制的方法,包括递归和非递归实现。详细解析了算法原理,提供了Java代码示例,并展示了运行结果。

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

1. 题目

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

2. 题目分析

   要将一个十进制转化为b进制,自然想到求二进制时的除二取余法,只要将2换为b即可。问题时怎样将这样的问题转化为递归模型。
   经过数学归纳找到数学边界条件:n<b,如果n<b意味着不用接着往下求余数了。如何确定递归体,回想除二取余的过程,从下往上的读就能知道转化后的二进制,即确定了转化后的数。同理,转化为b进制时只需要从后到前的记下每一位上的数字即可。同时,若出现10-15之间的数字则用A,B,C,D,E,F表示。用字符串把最后求出来的接在字符串开始,最先求出来的部分接在后面。
递归模型。
   经过分析,容易得到递归公式:
在这里插入图片描述

3. 递归栈表示

在这里插入图片描述

4. 代码:

递归

package indi.zxp.jz;
import java.util.Scanner;
public class Binary_conversion {
	public static String binary(int n,int b) {
		if(n<b) {
			if(n<10)
				return String.valueOf(n);	
			else if(10==n)
				return "A";
			else if(11==n)
				return "B";
			else if(12==n)
				return "C";
			else if(13==n)
				return "D";
			else if(14==n)
				return "E";
			else 
				return "F";	
		}
		else {
			if((n%b)<10)
				return binary(n/b,b).concat(String.valueOf(n%b));
			if((n%b)==10)
				return binary(n/b,b).concat("A");
			else if((n%b)==11)
				return binary(n/b,b).concat("B");
			else if((n%b)==12)
				return binary(n/b,b).concat("C");
			else if((n%b)==13)
				return binary(n/b,b).concat("D");
			else if((n%b)==14)
				return binary(n/b,b).concat("E");
			else 
				return binary(n/b,b).concat("F");
		}
	}
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		System.out.printf("请输入n的值:");
		int n=sc.nextInt();
		System.out.println("请输入要转换的进制(2-15)");
		System.out.println("提示:您需要输入一个正确的数字,若不正确,则重新输入!");
		int b;
		do {
			b=sc.nextInt();
		}while(b<=1||b>16);
		sc.close();
		System.out.printf(n+"的"+b+"进制为:"+binary(n,b));
	}
}

非递归

package snippet;
import java.util.LinkedList;
import java.util.Scanner;
public class bc {
	public static void binary(int n,int b) {
		LinkedList<String> bs=new LinkedList<String>();
		if(n<b) {
			if(n<10)
				bs.add(String.valueOf(n));
			else if(11==n)
				bs.add("A");
			else if(12==n)
				bs.add("B");
			else if(13==n)
				bs.add("C");
			else if(14==n)
				bs.add("D");
			else if(15==n)
				bs.add("E");
			else bs.add("F");
		}
			
		else {
			while(n>=b) {
				int a=n%b;
				if(a<10)
					bs.add(String.valueOf(a));
				else if(10==a)
					bs.add("A");
				else if(11==a)
					bs.add("B");
				else if(12==a)
					bs.add("C");
				else if(13==a)
					bs.add("D");
				else if(14==a)
					bs.add("E");
				else bs.add("F");
				n=n/b;
			}
			int c=n%b;
			if(c<10)
				bs.add(String.valueOf(c));
			else if(10==c)
				bs.add("A");
			else if(11==c)
				bs.add("B");
			else if(12==c)
				bs.add("C");
			else if(13==c)
				bs.add("D");
			else if(14==c)
				bs.add("E");
			else bs.add("F");
			//System.out.println(bs);
			LinkedList<String> cs=new LinkedList<String>();
			while(!bs.isEmpty()) {
				cs.add(bs.removeLast());
			}
			System.out.println(cs);
		}
	}
	public static void main(String []args) {
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入n的值:");
		int n=sc.nextInt();
		System.out.println("请输入要转换的进制(2-15)");
		int b=sc.nextInt();
		sc.close();
		binary(n,b);
	}
}

5. 运行结果:

在这里插入图片描述

在这里插入图片描述

6. 总结

   使用Java语言,通过字符串连接函数将求出来的值进行连接,最终向调用该函数的主函数返回一个字符串形式的值。通过求递归边界和函数体再次练习使用递归,同时,用递归栈有助于理解递归模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值