概述
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进制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复