天天看点

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);
		}
	}
	
}