我正在尝试创建一个将十进制转换为二进制并在二进制之前打印 0b 的程序。
我需要程序在输入为 0 时打印 0b0,在输入为 29 时打印 0b11101。我似乎可以做一个,但不能做另一个,当我修复那个错误时,另一个停止工作
我哪里错了?
#include <stdio.h>
int main()
{
int n,i = 0,j=0,k;
scanf("%d",&n);
int bin[100];
k=n;
//printf("n is %d \n",n);
while(n!=0)
{
//printf("n is %d :\n",n);
bin[i]= n%2;
//printf ("n/2 is %d\n",n%2);
n=(n-n%2)/2;
i++;
//printf("i is %d\n",i);
}
printf("0b");
//if (n='0')
//{
// printf("0");
//}
//else
//{
for (j=i;j>0;j--)
{
//printf("\n j is,%d and there ,is %d\n",j,bin[(j-1)]);
printf("%d",bin[(j-1)]);
}
//}
}
最佳答案
0 不需要被视为特例。只需修复:使用 do
循环而不是 while ()
.
#include <stdio.h>
int main() {
int n,i = 0,j=0,k;
scanf("%d",&n);
int bin[100];
// k=n; // not needed
// while(n!=0) {
do {
bin[i]= n%2;
// Another simplification
// n=(n-n%2)/2;
n /= 2;
i++;
} while (n);
printf("0b");
for (j=i;j>0;j--) {
printf("%d",bin[(j-1)]);
}
}
处理 n<0
所需的其他编码.
关于c - 十进制转二进制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39432698/