在Java中使用递归打印整数的二进制等价物
给定一个整数作为输入,我们需要编写一个程序来使用Java将给定的整数转换为等效的二进制数。 BigInteger 类用于涉及非常大的整数计算的数学运算,这些计算超出了所有可用原始数据类型的限制。
例子:
Input : 1
Output: 1
Input : 12
Output: 1100
Input : 32
Output: 100000
算法
- 在数组中将数字除以 2 时跟踪余数。
- 将数字除以 2。
- 重复以上两步,直到数字大于零。
- 现在以相反的顺序打印数组。
逐步执行:假设二进制数为 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))