Java编写十进制数转(二进制,八进制,十六进制)附源码(面向对象思想解决)

写在前面

**本文共涉及两个Java程序(即两个类)
工具类:类中有三个方法,分别用于转换为二,八,十六进制(文末有完整源码)
主程序类:用于调用工具类中的方法来实现十进制数转换(文末有完整源码)
**

进制转换(数学方法)

进制转换公式

1、 转换为二进制算法解析

算法源码

// 将x转换为二进制方法
public int Two(int x) {
		int t=0;
		int a;
		for(int i=1;x>0;i=i*10)
		{
			a=x%2;
			x=x/2;
			t=t+a*i;
		}
		return t;
	}

依照数学公式,程序中x%2的结果为余数,即二进制中最后一位数字,x=x/2即用新的x求余,最终我们要得出二进制数,就要将余数逆向输出,由于输出后只是表达方式不同(只有0,1),但仍然是十进制数,所以逆向输出就是:第一个得出的余数是个位数,第二个得出余数是十位数。故可以利用累乘10后再累加得出最终的二进制数。

2、 转换为八进制算法解析

算法源码

// 将x转换为八进制方法
public int Eight(int x) {
		int t=0;
		int a;
		for(int i=1;x>0;i=i*10)
		{
			a=x%8;
			x=x/8;
			t=t+a*i;
		}
		return t;
	}

八进制数与二进制转换类似,故略,不再详解

3、 转换为十六进制算法解析

算法源码

// 将x转换为十六进制方法
public String Sixteen(int x) {
		String t="";
		int a;
		for(;x>0;)
		{
			a=x%16;
			switch(a)
			{
			case 10: t="A"+t; break;
			case 11: t="B"+t; break;
			case 12: t="C"+t; break;
			case 13: t="D"+t; break;
			case 14: t="E"+t; break;
			case 15: t="F"+t; break;
			default : t=a+t;	
			}
			x=x/16;
		}
		return t;
	}

由于十六进制的表示方法中超出10的数的表示是由字母表示,
(A:10 B:11 C:12 D:13 E:14 F:15)
所以不能用上述方法解决。
由于涉及字符,所以利用字符串的连接得出十六进制结果。
基本方法依然是求余然后逆向输出余数,只是当遇到余数大于10时利用字符拼接,所以加上**switch(a)**判断拼接的字符,由于是拼接,所以不用累乘,直接得出余数后循环拼接。
上述转换为二进制及八进制的算法也可用字符拼接,比累乘累加简单一点

欢迎评论区评论字符拼接算法

工具类源码

// 工具类
public class BinaryTool {
	public int Two(int x) {
		int t=0;
		int a;
		for(int i=1;x>0;i=i*10)
		{
			a=x%2;
			x=x/2;
			t=t+a*i;
		}
		return t;
	}
	public int Eight(int x) {
		int t=0;
		int a;
		for(int i=1;x>0;i=i*10)
		{
			a=x%8;
			x=x/8;
			t=t+a*i;
		}
		return t;
	}
	public String Sixteen(int x) {
		String t="";
		int a;
		for(;x>0;)
		{
			a=x%16;
			switch(a)
			{
			case 10: t="A"+t; break;
			case 11: t="B"+t; break;
			case 12: t="C"+t; break;
			case 13: t="D"+t; break;
			case 14: t="E"+t; break;
			case 15: t="F"+t; break;
			default : t=a+t;	
			}
			x=x/16;
		}
		return t;
	}

}

主程序源码

// 主程序
import java.util.Scanner;	//导入Scanner包
public class Shuru {
	public static void main(String[] args) {
		BinaryTool Tool = new BinaryTool();
		Scanner print = new Scanner(System.in);
		int x=print.nextInt();
		System.out.println(Tool.Two(x));
		System.out.println(Tool.Eight(x));
		System.out.println(Tool.Sixteen(x));
	}
}
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值