[英]decimal to binary conversion error
我正在嘗試創建一個將十進制轉換為二進制並在二進制之前打印 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
所需的其他編碼。
#include <stdio.h>
int main()
{
int n,i = 0,j=0,k;
scanf("%d",&n);
int bin[100];
k=n;
while(n!=0)
{
bin[i]= n%2;
n=(n-n%2)/2;
i++;
}
printf("0b");
if (k==0)
{
printf("0");
}
else
{
for (j=i-1;j>=0;j--)
{
printf("%d",bin[(j-1)]);
}
}
}
十進制到二進制轉換函數的一種天真且更便攜的實現......
#include <limits.h>
void print_binary(unsigned x){
unsigned n=UINT_MAX;
n = ~(n >> 1);
while (n){
if (n & x)
putchar('1');
else
putchar('0');
n = n >> 1;
}
putchar('\n');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.