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取模,把所得的一个个数当作字符串拼接起来作为最后的目标值。
我想突破三位和八进制的束缚,所以就用循环语句编写了这个程序。但是它仍有不足之处:对于十以上的进制数所得结果可能不正确,只能从十进制开始转换而不是任意进制。我还会继续思考和学习,完善这个小程序。
第一次写博客,如有不足之处,望各方斧正,多谢。