所以这是我想到转换过程时想到的逻辑 二进制数转换为十进制数。我似乎无法弄清楚该程序的错误是什么,它阻止它显示任何类型的输出。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,temp,r,rev,i, ct;
rev=0;
printf("Enter a number in base 10");
scanf("%d", &n);
// n is the decimal number
temp=n;
while(temp>0)
{
r=temp%2;
if (r==1)
break;
else
ct++;
temp/=2;
// ct will count the number of zeros from the top
}
while(temp>0)
{
r=temp%2;
rev=(rev*10 + r);
}
printf("%d", rev);
for(i=0;i<ct;i++)
{
printf("%i", 0);
}
return 0;
}
答案 0 :(得分:0)
您的代码有多个问题:
1)ct
是未初始化的变量。将其初始化为0。
2)在单循环中计算二进制的部分,需要temp=temp/2
来计算二进制的下一个数字。
while(temp>0)
{
r=temp%2;
rev=(rev*10 + r);
temp/=2; // You need this
}
3)当您使用整数变量(rev
)表示二进制数时,您的程序只能处理一小组整数。即使输入2047这样的小数字(取决于你的平台上二进制的LSB是1还是INT_MAX
),你也会遇到整数溢出。