十进制转二进制有问题

Tra*_*gar 2 dart

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;
}
Run Code Online (Sandbox Code Playgroud)

它返回了无数个数字。

小智 5

您只需要处理 double 到 int 的转换: 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 由于 `input` 是一个 int,这是整数除法的一个很好的用例:`input ~/= 2;`。无需转换。 (2认同)

a.l*_*l.e 5

这是上述函数的一个版本:

  • 使用整数除法
  • 使用三元条件运算符,可以避免转换为字符串。
  • 将最重要的位设置在左侧(bin = (dec % 2) + bin;这是大多数人所期望的,但不是原始片段所做的)
String dec2bin(int dec) {
  var bin = '';
  while (dec > 0) {
    bin = (dec % 2 == 0 ? '0' : '1') + bin;
    dec ~/= 2;
  }
  return bin;
}
Run Code Online (Sandbox Code Playgroud)

PS:但是,当然,我们可以简单地写:

var bin = num.toRadixString(2);
Run Code Online (Sandbox Code Playgroud)

没有真正需要编写自己的dec2bin函数。