开发者

Converting decimal into binary in c using pointers

开发者 https://www.devze.com 2022-12-07 22:33 出处:网络
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 co

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 de开发者_运维知识库cimalToBinary(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.


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


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;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消