int main(){
int input;
int bin = 0, i = 1;
print("Please input a number");
input = num.parse(stdin.readLineSync());
while(input > 0)
{
bin = bin + (input % 2)*i;
input = input/2;
i = i * 10;
}
return 0;
}
它返回了无限数字。
答案 0 :(得分:4)
您只需要处理双向转换:input = (input/2).floor()
请参阅此工作代码:
void main() {
int input;
int bin = 0, i = 1;
input = 5;
while(input > 0)
{
bin = bin + (input % 2)*i;
input = (input/2).floor();
i = i * 10;
}
print(bin);
}
答案 1 :(得分:2)
因为int结果的长度很容易变大,并且dart中的最大int值为2e53(如果编译为Web,则更少)。最好更改方法并以String形式返回。
String dec2bin(int decimal) {
String bin = '';
while (decimal > 0) {
bin = bin + (decimal % 2).toString();
decimal = (decimal / 2).floor();
}
return bin;
}
print(dec2bin(132070242815));
结果:1111111110011111111111111111110101111
答案 2 :(得分:0)
以下是上述功能的一个版本:
bin = (dec % 2) + bin
;这是大多数人所期望的,但不是原始片段的作用)String dec2bin(int dec) {
var bin = '';
while (dec > 0) {
bin = (dec % 2 == 0 ? '0' : '1') + bin;
dec ~/= 2;
}
return bin;
}
P.S:但是,当然可以简单地写:
var bin = num.toRadixString(2);
真正不需要编写自己的dec2bin
函数。
答案 3 :(得分:-1)
//number is always in int
static String decimalToBinary(int number) {
return number.toRadixString(2);
}
//binary is always in string
static int binaryToDecimal(String binary) {
return int.parse(binary, radix: 2);
}