Convert Decimal Number to Binary or Hex Without itoa function

Specific + generalised approach

#include <stdio.h>
#include <stdint.h>
/*
void print_base(uint16_t num, uint8_t base) {
    uint8_t digit, i;
    uint16_t val;
    if(num <= 1){
        putchar((num) ? '1' : '0');
        return;     //exit function as work is done
    }
    if(base == 2){
        i = 16;
        while(i--){
            if( (num & (1U << i)) )     break;
        }
        putchar('1');
        while(i--){
            putchar((num & (1U << i)) ? '1' : '0');
        }
    }
    else {
        i = 4;
        while(i--){
            if( (num & (0x0FU << (i*4))) )     break;
        }
        i++;
        while(i--){
            digit = (num & (0x0FU << (i*4)));
            digit >>= (i*4);
            if(digit < 10){
                putchar( ('0'+digit) );
            }
            else{
                digit -= 10;
                putchar( ('A' + digit) );
            }
        }

    }
}
*/
// Specifically tuned for base 2 & 16 only, uses bitwise operations than division

void print_base(uint16_t num, uint8_t base) {
    char digits[17] = "0123456789ABCDEF";
    char buff[18];
    uint8_t j,i = 0;
    if(num <= 1){
        putchar((num) ? '1' : '0');
        return;
    }
    while(num){
        buff[i++] = digits[num % base];
        num /= base; 
    }

    for(j = i-1; j> 0; j--){
        putchar(buff[j]);
    }
    putchar(buff[j]);

}

int main() {
    uint16_t num;
    uint8_t base;
    scanf("%hu %hhu", &num, &base);

    print_base(num, base);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

10 2

Expected Output

1010