我尝试编写此代码而不使用任何数组或其他东西,但仅使用循环,我写下来它工作正常,但它有一个问题,我找不到任何解决方案:问题是它不写零 对于exmp: 如果我输入43它会正确转换它:101011 但是当我键入12时,它只显示11而不是1100
int decimal,binr=0;
int bin=0,rem,i;
printf("enter the decimal number:");
scanf("%d",&decimal);
for(i=1;decimal!=0;i++){
rem=decimal%2;
binr= binr*10 +rem;
decimal=decimal/2;
}
for(i=0;binr!=0;i++){
rem = binr%10;
bin= bin*10 +rem ;
binr=binr/10;
}
printf("the binary equivalent is: %d",bin);
答案 0 :(得分:0)
如果您尝试调试代码,您会非常清楚地看到它。 如果你在b10到b2程序中运行12,它会这样做:
result=0, value=12
ret = 12 % 2 -> 0
-> result = result * 10 + ret -> 0*10 + 0
result=0, value=6
ret = 6 % 2 -> 0
-> result = result * 10 + ret -> 0*10 + 0
result=0, value=3
...
您可以看到您的程序没有按预期执行。
此外,请勿在此处使用for循环。它显然是一个while循环(你甚至从未使用过i变量,为什么增加?)。
如果你做一些研究,你会看到很多十进制/二进制算法实现的实现。
答案 1 :(得分:0)
您的代码行为异常,因为当累加器为0时退出。相反,如果计算这些位,则不会忽略这些零。请注意,一旦您将输入读入变量,它就不再以十进制表示,因此您可以直接使用二进制,在数字反转时对位进行计数。
#include <stdio.h>
int main (void) {
unsigned decimal = 12;
unsigned reverse = 0;
unsigned bits = 0;
while(decimal != 0) {
reverse = reverse * 2 + decimal % 2;
decimal /= 2;
bits++;
}
if(bits == 0) { // special case
printf("0");
}
while(bits != 0) {
printf("%u", reverse % 2);
reverse /= 2;
bits--;
}
printf("\n");
return 0;
}
节目输出:
1100