2016-03-21 3 views
-1

Я пытаюсь написать этот код без использования каких-либо массивов или других материалов, но только с использованием циклов, я записал его, он работает нормально, но есть проблема, и я не мог найти решения для что: проблема заключается в том, что не записывает нули для exmp: если я набираю 43 он преобразует его правильно: 101011 , но когда я типа 12 он показывает только 11 вместо 1100Десятичное значение для двоичного преобразования в C

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

Спасибо, что это помогло много :)) –

+1

Может использовать 'do {reverse = reverse * 2 + decimal% 2; десятичная/= 2; биты ++; } while (decimal); 'и затем отбросить специальный случай. – chux

+0

@chux Я пропустил это, на самом деле заметил только исключение в качестве запоздалой мысли ( –

0

Если вы пробовали чтобы отладить ваш код, вы увидите его очень понятным. Если запустить 12 в вашем b10 к b2 программе, было бы это сделать:

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 
... 

Вы можете увидеть, ваша программа не делает то, что предполагается.

Кроме того, не используйте для петель здесь. Очевидно, что цикл while (вы даже не использовали переменную i, почему это увеличение для?).

Если вы выполните какое-либо исследование, вы увидите множество реализаций реализации десятичного/двоичного алгоритма.

+0

переменная i предназначена только для того, чтобы сохранить цикл до тех пор, пока десятичное значение не будет равно 0, я сделал много исследований, и я знаю несколько способов сделать это преобразование, но мне нужен такой код, просто используя циклы. моя единственная проблема, как я уже говорил. Программа не показывает нули –

Смежные вопросы