我是靠谱客的博主 勤劳翅膀,最近开发中收集的这篇文章主要介绍用JAVA实现十进制转n进制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

最后

以上就是勤劳翅膀为你收集整理的用JAVA实现十进制转n进制的全部内容,希望文章能够帮你解决用JAVA实现十进制转n进制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(82)

评论列表共有 0 条评论

立即
投稿
返回
顶部