java 十进制转二进制代码_【Java】“手动”十进制转二至九进制

Java本身提供了integer类可供十进制转换,但是自己尝试编写这个小功能,感受一下过程也是很愉悦的。

先贴上源代码:

import java.util.Scanner;

public class exam

{ //—————————————-

// 此程序可将任意位十进制数转成二至九进制数,

// 若超过十进制则不能保证正确.

//—————————————-

public static void main(String[] args) {

int decimal ,x;

Scanner scan = new Scanner (System.in);

System.out.print(“Enter a decimal number: “);

decimal = scan.nextInt();//输入一个十进制数

System.out.print(“Target hexadecimal number :”);

x = scan.nextInt();

int num=0 ,

a , b=decimal ,

c=0 , d=0 ;

while ( d > 0 ) //while循环语句

{ a = b%x ;

b /= x ;

double f=Math.pow(10,c);//注意要使用Math类而不要使用^

c ++ ;

d = a*(int)f ;//若不进行窄转换会报错

num += d ;

}

System.out.println(“turn into the target hexadecimal number: ” + num ) ;

}

}

拿掉注释,咱们一条一条分析:

import java.util.Scanner;

由于不是默认的Class,首先要先import Scanner,否则将会报错。

public class exam

{

public static void main(String[] args) {

写出main方法。

int decimal ,x;

定义一个叫decimal的变量,之后将作为用户输入想要被转换的十进制数的值。

而x作为未知量,即为最后输出的目标值。

Scanner scan = new Scanner (System.in);

System.out.print(“Enter a decimal number: “);

运行后在屏幕上会显示“Enter a decimal number: ”提示用户输入,实现交互

decimal = scan.nextInt();

将用户输入的值赋给decimal

System.out.print(“Target hexadecimal number :”);

x = scan.nextInt();

原理同上

int num=0 ,

a=0 , b=decimal ,

c=0 , d=0 ;

下面while循环语句会用到的一些变量,局部变量记得初始化,不然compiler报错

高中数学里面讲过十进制转换为x进制数,下面的思路相同。即:把一个十进制数b作为被除数,除以x,将其余数a写在式子右边。所得商b’作为被除数再除以x,将其余数a’写在a的下方……反复若干次运算直至所得商为0。最后从下至上将余数a的一列数写出,即为所求结果。 (不妨拿笔试试)

while ( d > 0 )

当商循环到0时,输出结果。

{ a = b%x ;

求出余数a

b /= x ;

求出商b’

double f=Math.pow(10,c);

为了实现从下至上将余数a的一列写出的功能,需要对每一次输出的余数a乘以10的c次方。注意要使用Math类而不要使用^。

c ++;

第一次循环时c=0,余数a作为目标值的个位数 ,

第二次循环时c=1,余数a’作为目标值的十位数 ,

第三次……

d = a*(int)f ;

循环得出的结果赋值给d

num += d ;

把d累加起来

}

System.out.println(“turn into the target hexadecimal number: ” + num ) ;

最后在屏幕上会得出目标值

}

}

写在最后的话:

第一次写程序,教授让编写能将一个三位十进制数转换为八进制数的程序。很多同学直接对a多次用8取模,把所得的一个个数当作字符串拼接起来作为最后的目标值。

我想突破三位和八进制的束缚,所以就用循环语句编写了这个程序。但是它仍有不足之处:对于十以上的进制数所得结果可能不正确,只能从十进制开始转换而不是任意进制。我还会继续思考和学习,完善这个小程序。

第一次写博客,如有不足之处,望各方斧正,多谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值