1. 程式人生 > >從鍵盤輸入某個十進位制小數或整數,轉換成對應的二進位制小數並輸出。 (查詢十進位制小數轉換成二進位制小數的演算法,使用迴圈來實現。 最多保留小數位後7位數字即可)演算法

從鍵盤輸入某個十進位制小數或整數,轉換成對應的二進位制小數並輸出。 (查詢十進位制小數轉換成二進位制小數的演算法,使用迴圈來實現。 最多保留小數位後7位數字即可)演算法


/*演算法:把小數分成兩截,一截是整數,一截是小數。讓整數除以2取餘,倒敘輸出來
打印出二進位制(第一個數為個位,第二個數為10位,即乘以10,第三位數為百位,
即乘以100。。以此類推,即迴圈乘以10),直到除數
為0為止。小數乘以2,取整然後列印2進位制,直到小數部分為0為止,或者列印小數
後7位為止。(實就是每次迴圈讓第一個數x0.1,第二個數x0.01,依次如此。
最後相加,列印累加的值)*/
import java.util.*;
public class TenToTwo
{
public static void main(String[] args){
int sumInt=0,h=0;
double sumDouble=0,j=0.1;
System.out.print("請輸入一個數:");
Scanner sc=new Scanner(System.in);
double num=sc.nextDouble();
int numInt=(int)num;//取整數部分
double numD=num-numInt;//取小數部分
//整數部分求二進位制
for(int i=1;;i=i*10){
/*int chuShu=numInt/2;
int yuShu=numInt%2;//餘數部分為2進位制的一位
sumInt+=yuShu*i;
numInt=chuShu;//把除數賦予整數,迴圈讓下一次去除*/
//上面的程式碼可以簡化成下面的兩行
sumInt+=numInt%2*i;
numInt=numInt/2;
if(numInt==0){
break;
}
}
//小數部分求二進位制
for(;;j=j*0.1){
/*int zhengShu=(int)(numD*2);//求二進位制數
sumDouble+=zhengShu*j;//一個二進位制數*0.1,下一個則乘以0.01,依次,最後累加
double xiaoShu=numD*2-zhengShu;//剩下的小數
numD=xiaoShu;//剩下的小數賦予numD去迴圈,因為剩下的小數也要繼續乘以2*/
//上面的程式碼可以簡化如下兩行:
sumDouble+=(int)(numD*2)*j;
numD=numD*2-(int)(numD*2);
h++;//計已經有了小數點後多少位數
if(numD==0||h==7){
break;
}
}
System.out.print(num+"的二進位制數為:"+(sumInt+sumDouble));
}
}