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

    原文作者:进制转换
    原文地址: https://blog.csdn.net/Southerngold/article/details/52887640
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞