在使用While循环时转换为二进制的问题



我目前正在尝试解决java中的二进制间隙问题,并首先尝试使用while循环将十进制转换为二进制。我正在用不同的十进制输入测试它,但注意到在逐步执行它之后,在最后的循环中,我得到整数溢出而不是附加一个1,(或者至少我认为我是,它从100010000到411065418,我假设是因为它乘以100010000 *10)

我试着通过它,这是我目前的代码:

public class BinaryGap {
public static void main(String[] args) {
// write your code in Java SE 8
int decimal = 529;
int ans =0; 
//returns the number in binary but in big endian form
while(decimal != 0){
ans += (decimal % 2);
ans *= 10; 
decimal /=2;             
}
}
}

如果你能告诉我我的思路哪里错了,我将不胜感激。

您的代码在概念上运行良好-但是变量'ans'满足int - 2147483647的限制。
当这个值加上+1时,变量溢出并变为最小值。
为了克服这个问题,你可以对'ans'变量使用'String'类型,并对代码进行微调:

int decimal = 529;
String ans = "";
//returns the number in binary but in big endian form
while(decimal != 0){
ans += (decimal % 2);
decimal /=2;
}