将十进制转换为二进制有问题

时间:2016-05-06 06:29:39

标签: 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;
}

它返回了无限数字。

4 个答案:

答案 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));

结果:1​​111111110011111111111111111110101111

答案 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);
}