C++中的十进制到二进制转换器

jhkqcmku  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(210)

我的任务是创建一个简单的十进制到二进制的转换器,不使用任何字符串或数组。

#include <iostream>

int main() {
  int64_t n;
  int64_t i = 1;
  int64_t bit;
  int64_t fbit;
  
  std::cout << "Number: " << std::endl;
  std::cin >> n;
    while (n != 0) {
    bit = n % 2;
    n = n / 2;
    fbit = fbit + (bit * i);
    i = i * 10;

    }
  std::cout << fbit;
  return 0;
}

对于较小的数字,这是完美的工作,但大的数字似乎失败。例如:432471278不起作用,即使这个数字是'刚刚' 29位大。我认为通过使用'int64_t'这应该工作,虽然。

4urapxun

4urapxun1#

11001110001101111110011101110432471278的二进制表示形式,长度为29位,当将其视为十进制值时,对于int64_t来说太大。(最大值为9223372036854775807,长度为19位)
使用未初始化的非静态局部变量fbit的值也是不好的。
一个简单的方法是使用递归使堆栈记录转换的数字,直到完成高位数字的转换。

#include <iostream>

void convert(int64_t n) {
  if (n > 1) convert(n / 2);
  std::cout << (n % 2);
}

int main() {
  int64_t n;
  
  std::cout << "Number: " << std::endl;
  std::cin >> n;
  convert(n);
  std::cout << '\n';
  return 0;
}

相关问题