2016-09-11 2 views
1

Я пытаюсь создать программу, которая преобразует десятичную в двоичную и печатает 0b перед двоичным кодом.ошибка десятичного двоичного преобразования

мне нужна программа для печати 0b0, если 0 является входом, а 0b11101 при входе 29. Я могу показаться, чтобы сделать один, но не другие, и когда я исправить эту ошибку, другие перестает работать

Где я иду не так?

#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

Можете ли вы показать мне токовый выход ?? –

+0

Я отправил ответ, проверю и дайте мне знать, если у вас возникнут проблемы. –

+0

[Как отформатировать мои сообщения с помощью Markdown или HTML?] (Http://stackoverflow.com/help/formatting) [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/ help/mcve) – buhtz

ответ

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)]); 
     } 
    } 
} 
+0

Думаю, вы должны напечатать '' 0b0 "' в случае 'k == 0', а не' 0'. Кроме того, зачем делать десятичное преобразование снова с форматом '% d' в printf. У вас много ресурсов процессора, чтобы тратить? –

+0

@ LuisColorado, я дал 'k == 0' только, Can u проверить его еще раз ?? А для printf, что я должен использовать? –

+0

для 'printf (...);' вы можете использовать 'fputc (bin [j-1]? '1': '0', stdout);' Это только делает один логический тест для выбора того, какой символ печатать. Я не видел префикс 'printf (« 0b »);' перед испытанием для 'k == 0', поэтому мои извинения за пламя. –

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.

0

Наивный и более компактен, реализация десятичной к бинарной функции преобразования ...

#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'); 
} 
Смежные вопросы