用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语言,通过字符串连接函数将求出来的值进行连接,最终向调用该函数的主函数返回一个字符串形式的值。通过求递归边界和函数体再次练习使用递归,同时,用递归栈有助于理解递归模型。
上一篇:
			            微信小程序ssm电影院售票系统app 
			          
			          下一篇:
			            基于PHP的个人博客网站系统 
			          
			        