我的程序应该将十进制数转换为二进制数。对于大数字,它给我一个负数而不是二进制数。这是为什么?
例如,如果我提供 2321
,我会得到 100100010001
,这很好。但如果我提供
241242141
我得到-2127232070093227171
。
我无法使用字符串、数组、函数。还有另一个选项不将其定义为字符串吗?输出?
import java.util.Scanner;
public class d {
public static void main(String[] args) {
long num = 0;
long temp = 0L;
Scanner sc = new Scanner(System.in);
num = sc.nextLong();
long place = 1L;
long output = 0;
//System.out.print(""+ num%2+ (num%2)%2);
while(num != 0) {
temp = num % 2;
num = num / 2;
output += (place*temp);
place *=10;
}
System.out.print(""+output);
}
}
最佳答案
你的问题就在这里
output += (place*temp);
place *=10;
这会产生一个溢出的数字。
一个简单的替代方法是创建一个字符串,而不是生成一个无论如何都会转换为字符串的数字。
StringBuilder output = new StringBuilder();
while(num != 0) {
output.append(num & 1);
num >>>= 1;
}
System.out.print(output.reverse());
甚至
StringBuilder output = new StringBuilder();
for(long num = sc.netLong(); num != 0; num >>>= 1)
output.append(num & 1);
System.out.print(output.reverse());
<小时/>
如果您不想使用除输入或输出之外的任何功能。
long num = 241242141;
int shift = 63;
while (num >>> shift == 0 && shift > 0) shift--;
for (; shift >= 0; shift--)
System.out.print((num >>> shift) & 1);
// for comparison only
System.out.println("\n"+Long.toBinaryString(num));
打印
1110011000010001000000011101
1110011000010001000000011101
关于Java 十进制转二进制 - 大数转二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13249419/