java代码实现十进制到二进制的转化

前言

十进制与二进制之间的转化是小学就学过的内容,但是我相信还是有一部分同学忘了如何“反向求余”,代码用python和matlab等编程语言特别好实现,对于刚接触java语言的同学来说,此算法的难点在于java必须事先定义好数组的长度。本文旨在利用最基础的java语言来实现二进制到十进制的转化。

代码

import java.util.Scanner;

public class exchange {
    public static void main(String[] args) {
        System.out.println("请输入一个大于0的十进制的数");
        Scanner sc=new Scanner(System.in);
        int a=sc.nextInt();
        String result;
        result=ten_to_two(a);
        System.out.println(result);

    }
    public static String ten_to_two(int a){
        //最终结果:
        String result="最终结果:";
        //十进制数字对2求余的结果
        int b;
        //二进制长度
        int a1=a;
        int length=1;
        //求出数组的长度
        while(a1/2>=1){
            b=a1%2;
            a1=(a1-b)/2;
            length+=1;
        }
        //反向求余
        int[] arr= new int[length];
        for(int i=0;i<arr.length;i++){
            arr[i]=a%2;
            a=(a-arr[i])/2;
        }
        for(int i=arr.length-1;i>=0; i--){
            result=result+arr[i];
        }
        return result;
    }
}

在写出相应的算法之后,我们对算法的复杂度进行分析,很容易看出算法的空间复杂度为O(1),因为算法的储存空间是固定的,不会发生改变,其次我们对算法的时间复杂度进行分析,分析算法的时间复杂度一般看循环中最内层代码执行的次数,在算法中循环总共分为3部分:
(1)while(a1/2>=1)也可以看成2*x<=a1,可算出x=log2(a1);不想打数学公式了,凑活看
下面两个循环次数其实是由while这部分决定的,应该也是log2(a1),因此,空间复杂度为O(1),时间复杂度为O(log2(a1)).

结语

我也刚开始学,大家一起进步!

你可能感兴趣的:(笔记,java,算法,开发语言)