十進制轉換為二進制并輸出,本文僅讨論整數部分
方法:除2取餘法,即每次将整數部分除以2,餘數為該位權上的數,而商繼續除以2,餘數又為上一個位權上的數,這個步驟一
直持續下去,直到商為0為止;最後讀數時候,從最後一個餘數讀起,一直到最前面的一個餘數。
下面舉例:
例:将十進制的168轉換為二進制
得出結果 将十進制的168轉換為二進制,(10101000)2
分析:
第一步,将168除以2,商84,餘數為0。
第二步,将商84除以2,商42餘數為0。
第三步,将商42除以2,商21餘數為0。
第四步,将商21除以2,商10餘數為1。
第五步,将商10除以2,商5餘數為0。
第六步,将商5除以2,商2餘數為1。
第七步,将商2除以2,商1餘數為0。
第八步,将商1除以2,商0餘數為1。
第九步,讀數,因為最後一位是經過多次除以2才得到的,是以它是最高位;
讀數字從最後的餘數向前讀,即1010100;算法如下:
package binary;
import java.util.Scanner;
/**
* 十進制轉換為2進制并輸出
* @author Administrator
*
*/
public class IntegerToBinary
{
private static StringBuilder mode;//存放二進制結果
private int middle;//存放遞歸過程中的10進制數值
public IntegerToBinary()
{
mode=new StringBuilder();
middle=0;
}
public static void main(String[] args)
{
IntegerToBinary to=new IntegerToBinary();
Scanner scan=new Scanner(System.in);
while(scan.hasNextInt())
{
System.out.println(to.toBinaryString(scan.nextInt()));
mode.delete(0, mode.length());//清空StringBuilder
}
}
/**
* 傳回10進制整數轉換得到的2進制字元串
* 如整數5,得到二進制的"101"
* @param i 需要轉換為2進制的10進制整數
* @return
*/
public String toBinaryString(int i)
{
this.toBinary(i);
return mode.toString();
}
/**
* 輾轉相除,并對餘數由最後得到1位餘數向前進行拼接
* @param i
*/
public void toBinary(int i)
{
if(i>=1)
{
middle=i/2;
this.toBinary(middle);//遞歸
mode.append(i%2);
}
}
}