天天看點

Java實作十進制數轉化為二進制數的算法

十進制轉換為二進制并輸出,本文僅讨論整數部分

  方法:除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);
		}
	}
	
}