Java十进制转化成二进制方法

来源:互联网 发布:淘宝上买车保险便宜吗 编辑:程序博客网 时间:2024/06/08 00:31

十进制转二进制的除二取余倒序法的逻辑依据是什么?

可以用十进制来类比:

一个数123456789用除十取余求它的十进制表达式
第一次除以10,商12345678 余9,
第二次除以10,商1234567 余8,
第三次除以10,商123456 余7,

一直到商比10小为止(n进制为商比n小为止)
咋取,是顺是倒,一目了然吧

下面具体说明
假设一个十进制数k要转换为n进制(设i位上的数字为m[i])
那么
k=m[i]*n^(i-1)+m[i-1]*n^(i-2)+m[i-2]*n^(i-3)+…+m[1]
当k第一次除以n的时候
商是m[i]*n^(i-2)+m[i-1]*n^(i-3)+m[i-2]*n^(i-4)+…+m[2] 余数是m[1]
同理 再次除以n的时候 余数是m[2]
…………………….
当最后,第i次除以n时 余数就是m[i]

倒序时候就是 m[i] m[i-1] 。。。m[2] m[1]
也就是转换出来的n进制数

事实上十进制数转换为任何n进制数的整数部分都能用除以n倒序取余

十进制转化成二进制代码如下:

//算法:除二倒序取余法import java.util.LinkedList;import java.util.Scanner;public class shijinzhiToerjinzhi {    public static void main(String[] args) {        Scanner scanner=new Scanner(System.in);        System.out.println("请输入一个整数:");        int n=scanner.nextInt();        scanner.close();        System.out.print(getBinary(n));    }    public static String getBinary(int num) {          int currentNum = num;//存放当前的被除数          LinkedList<String> list = new LinkedList<String>();//存放余数,也是就二进制数          while (currentNum != 0) {            if (currentNum % 2 == 0) {              list.addFirst("0"); //此处用 addFirst()可实现倒序取余          } else {              list.addFirst("1");            }            currentNum /= 2;          }          StringBuilder sb = new StringBuilder();//当然你可以使用其他形式作为方法的返回          for (int i = 0; i < list.size(); i++) {            sb.append(list.get(i));          }          return sb.toString();        }  }
0 0
原创粉丝点击