📜  在Java中使用递归打印整数的二进制等价物

📅  最后修改于: 2022-05-13 01:54:50.955000             🧑  作者: Mango

在Java中使用递归打印整数的二进制等价物

给定一个整数作为输入,我们需要编写一个程序来使用Java将给定的整数转换为等效的二进制数。 BigInteger 类用于涉及非常大的整数计算的数学运算,这些计算超出了所有可用原始数据类型的限制。

例子:

Input : 1
Output:    1

Input : 12
Output: 1100

Input : 32
Output: 100000

算法

  1. 在数组中将数字除以 2 时跟踪余数。
  2. 将数字除以 2。
  3. 重复以上两步,直到数字大于零。
  4. 现在以相反的顺序打印数组。

逐步执行:假设二进制数为 20。

  • 当 20 除以 2 时,余数为零。因此,a[0] = 0。
  • 20 除以 2。新数是 20/2 = 10。
  • 10 除以 2 的余数为零。因此,a[1] = 0。
  • 10 除以 2。新数是 10/2 = 5。
  • 5 除以 2 的余数为 1。因此,a[2] = 1。
  • 5 除以 2。新数是 5/2 = 2。
  • 2 除以 2 的余数为零。因此,a[3] = 0。
  • 2 除以 2。新数是 2/2 = 1。
  • 1 除以 2 的余数为 1。因此,a[4] = 1。
  • 1 除以 2。新数是 1/2 = 0。
  • 由于 number 变为 = 0。以相反的顺序打印数组。因此,等效的二进制数是 10100。

下图更清楚地显示了它的过程。

下面是上述想法在Java中的实现。

Java
// Java Program to Print Binary
// Equivalent of an Integer
// using Recursion
import java.util.*;
class GFG {
  
    public static int binaryConv(int n)
    {
        if (n == 1) {
  
            return 1;
        }
        return binaryConv(n / 2) * 10 + n % 2;
    }
    public static void main(String[] args)
    {
        int N = 20;
        System.out.println(binaryConv(N));
    }
}


Java
// Java Program to Print Binary
// Equivalent of an Integer
// using Recursion
import java.util.*;
import java.math.*;
class GFG {
  
    public static BigInteger binaryConv(BigInteger n)
    {
        if (n.compareTo(BigInteger.valueOf(1)) == 0) {
  
            return BigInteger.valueOf(1);
        }
        return ((binaryConv(n.divide(BigInteger.valueOf(2))).multiply(BigInteger.valueOf(10))).add(n.mod(BigInteger.valueOf(2))));
    }
    public static void main(String[] args)
    {
        BigInteger N = new BigInteger("9876543210987543210");
        System.out.println(binaryConv(N));
    }
}


输出
10100

时间复杂度: O (log(n))

B. 使用 BigInteger 类进行转换

Java

// Java Program to Print Binary
// Equivalent of an Integer
// using Recursion
import java.util.*;
import java.math.*;
class GFG {
  
    public static BigInteger binaryConv(BigInteger n)
    {
        if (n.compareTo(BigInteger.valueOf(1)) == 0) {
  
            return BigInteger.valueOf(1);
        }
        return ((binaryConv(n.divide(BigInteger.valueOf(2))).multiply(BigInteger.valueOf(10))).add(n.mod(BigInteger.valueOf(2))));
    }
    public static void main(String[] args)
    {
        BigInteger N = new BigInteger("9876543210987543210");
        System.out.println(binaryConv(N));
    }
}
输出
1000100100010000100001111011100011100011101101010101101010101010

时间复杂度: O (log(n))