【发布时间】:2012-10-23 10:55:22
【问题描述】:
我正在尝试使用以下算法在 C 中将十进制数转换为二进制数。我不明白为什么它对于某些输入不能正常工作(例如,对于 1993,我得到 1420076519)。
int aux=x;
long bin=0;
while (aux>0)
{
bin=bin*10+aux%2;
aux=aux/2;
}
printf("%d in decimal is %ld in binary.", x, bin);
【问题讨论】:
-
整数溢出?
long(如果是 64 位)只能容纳 10 位数字。 -
我建议使用字符串并将“0”和“1”字符连接起来。根据整数的大小,您将在相当小的值处溢出。
-
将二进制存储在 long int 中不是一个好主意。相反,您可以使用字符串。以下代码应该适合您。
-
你真的应该理清思路了。没有“十进制数”或“二进制数”之类的东西。位值系统只是一种表示数字的方式。问问自己:你手上的手指数是二进制还是十进制?只有思路清晰,才能正确编程。
-
只是一个建议:我认为这是最好的方法 -
string binary = bitset<50>(num).to_string();其中num是十进制数,50是您需要的二进制数。
标签: c algorithm binary decimal