用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的个人博客网站系统