Программа преобразования целых чисел в двоичные не работает для некоторых входов - PullRequest
0 голосов
/ 12 июня 2018

Я написал код для получения двоичной формы целого числа.Он хорошо работает для входов, таких как 1 или 10. Однако он не работает для входов, таких как 256. (Он дает выход 0000000 с и пропускает единицу).

#include <stdio.h>
#include <math.h>

int number_of_binary_digits_required(int n){

return ceil(log(n))+1;

}

void print_array(int * a, int n){

    int i = 0;
    for (;i<n;i++){
        printf("%d\t", a[i]);
    }

}


int main(){

int num = 256;
int binary[100];
int n = number_of_binary_digits_required(num);
int bin_digits = n-1;

while (num){

   int temp = num%2;
   num = num / 2;
   binary[bin_digits] = temp;
   //printf("%d\n", bin_digits);
   bin_digits--;

}

print_array(binary, n);

//printf("%d", number_of_binary_digits_required(num));
//for(bin_digits = 0;bin_digits < number_of_binary_digits_required(num);bin_digits++)
//printf("%d",binary[bin_digits]);


}

Почему возникает проблема и как ее решитьэто?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Функция журнала C дает результат с основанием e, а не 2. Вот почему некоторые числа дают неожиданный результат в вашей программе, так как вы рассчитываете, используя это.Есть функция log2 , которая, как мне кажется, вам нужна.

0 голосов
/ 12 июня 2018

Первая ошибка - использовать log (n), который вычисляет log из n базы e.

Вместо этого используйте log2 (n)

Надеюсь, это поможет.: -)

0 голосов
/ 12 июня 2018

Использование логарифмической функции для вычисления количества цифр в сочетании с ceil пострадает из-за недостаточного числа с плавающей запятой.

Более надежный способ вычисления количества двоичных цифр состоит в том, чтобы повторно делить на двепока ноль не будет достигнут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...