Home > Mobile >  Converting decimal into binary in c using pointers
Converting decimal into binary in c using pointers

Time:12-07

Write a function int* dec2bin(int N, int* n), which, given a natural number 0 ≤ N < 65535, computes and returns its representation in the binary numeral system. The program has to determine the coefficients ai ∈ {0,1}, i = 0,...,n − 1, such that N = (sum->n-1) ai2^i (n ≤ 16).

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

int decimalToBinary(int N)
{
    int B_Number = 0;
    int c= 0;
    int ctr=0;
    while (N != 0) {
        int rem = N % 2;
        c = pow(10, ctr);
        B_Number  = rem * c;
        N /= 2;
        ctr  ;
    }
    return B_Number;
}
 
int main()
{
    int N;
    scanf("%d", &N);
    printf("%d", decimalToBinary(N));
    return 0;
}

I know how to make a program that converts the numbers but I don't understand why the pointer is needed for and how to implement it.

CodePudding user response:

Use an integer type capable of encoding 1111_1111_1111_1111: use long long.

Do not use pow(), a floating point function for an integer problem. It may generate value just slightly smaller than the integer expected and is slow.

long long decimalToBinary_alt(int N) {
  long long B_Number = 0;
  long long power = 1;

  while (N != 0) {
    int rem = N % 2;  // result: -1, 0, or 1
    B_Number  = rem * power;
    N /= 2;
    power *= 10;  // Scale the power of 10 for the next iteration.
  }
  return B_Number;
}

Usage

printf("%lld\n", decimalToBinary(N));

CodePudding user response:

Your function does not have the required parameters and return value.

int* dec2bin(int N, int* n)
{
    unsigned uN = N;
    
    for(int bit = 15; bit >= 0; bit--)
    {
        *(n   15 - bit) = !!(uN & (1U << bit));
    }
    return n;
}
  • Related