这是我写的代码: 例如,
1.) Input =12
2.) No. of Digits = 2
3.) 00 (this is it: Expected Result 1100)
打印一半的二进制文件,但我真的不知道另一半的位置。
import java.util.Scanner;
class Decimal_to_Binary
{
public static void main(String args[])
{
Scanner Prakhar=new Scanner(System.in);
System.out.println("Enter a Number");
int x=Prakhar.nextInt();
int z=x;
int n=(int)Math.floor(Math.log10(x) +1);
System.out.println("No. of Digits="+n);
int a[]=new int[n];
int b=0;
int j=0;
while (x!=0)
{
x=z%2;
a[j]=x;
j++;
z=z/2;
}
int l=a.length;
for(int i=0;i<l;i++)
{
System.out.print(a[i]);
}
}
}
P.S。我知道还有其他方法可以做到,所以请不要建议使用其他方法。
答案 0 :(得分:1)
您的代码中存在一些问题:
1)计算二进制(n)中的数字位数(它应该是ceil(Math.log2(数字))。由于Math.log2在java中不可用,我们计算Math.log10(数字)/ Math .log10(2)
2)条件检查while(x!= 0)它应该是while(z!= 0),因为你在每个循环中将z跳水2
3)反向打印列表以打印正确的二进制表示。
以下是更正后的代码:
public static void main(String args[])
{
Scanner Prakhar=new Scanner(System.in);
System.out.println("Enter a Number");
int x=Prakhar.nextInt();
int z=x;
// correct logic for computing number of digits
int n=(int)Math.ceil(Math.log10(x)/Math.log10(2));
System.out.println("No. of Digits="+n);
int a[]=new int[n];
int b=0;
int j=0;
while (z!=0) // check if z != 0
{
x=z%2;
System.out.println(x);
a[j]=x;
j++;
z=z/2;
}
int l=a.length;
//reverse print for printing correct binary number
for(int i=l-1;i>=0;--i)
{
System.out.print(a[i]);
}
}
答案 1 :(得分:0)
实际上你在While循环中使用的循环检查条件是错误的。
while (x!=0)
{
x=z%2; --> Here x is 0 in case of even number and 1 in case of odd
a[j]=x;
j++;
z=z/2;
}
这里x在偶数的情况下为0,在奇数的情况下为1(参见While循环内的第一行) 所以在你的例子中你使用12,所以对于第一次和第二次迭代,x计算为0,因此这将打印,并且在第二次迭代后x变为1,因此在循环中断时。
使用以下条件 -
while (z!=0)
{
x=z%2;
a[j]=x;
j++;
z=z/2;
}