我的任务是创建一个简单的十进制到二进制的转换器,不使用任何字符串或数组。
#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'这应该工作,虽然。
1条答案
按热度按时间4urapxun1#
11001110001101111110011101110
是432471278
的二进制表示形式,长度为29位,当将其视为十进制值时,对于int64_t
来说太大。(最大值为9223372036854775807
,长度为19位)使用未初始化的非静态局部变量
fbit
的值也是不好的。一个简单的方法是使用递归使堆栈记录转换的数字,直到完成高位数字的转换。