Convert Decimal Number to Binary or Hex Without itoa function

Code

#include <stdio.h>
#include <stdint.h>

void print_base(uint16_t num, uint8_t base) {
    // Your logic here
    uint8_t first_set_bit_printed = 0;
    uint8_t first_set_nibble_printed = 0;
    uint8_t hex_digits[6] = {'A', 'B', 'C', 'D', 'E', 'F'};

    if (num == 0) {
        printf("0");
    }
    
    switch (base) {
    case 2:
        for (int i = 15; i >= 0; i--) {
            uint8_t bit_value = num & (0x1 << i);
            if (bit_value) {
                printf("1");
                first_set_bit_printed = 1;
            } else if (first_set_bit_printed && (!bit_value)) {
                printf("0");
            }
        }
        break;

    case 16:
        for (int i = 12; i >= 0; i = i-4) {
            uint8_t nibble_value = (num & (0xF << i)) >> (i);
            if (nibble_value <= 9 && nibble_value > 0) {
                printf("%u", nibble_value);
                first_set_nibble_printed = 1;
            } else if (nibble_value > 9) {
                printf("%c", hex_digits[nibble_value-10]);
                first_set_nibble_printed = 1;
            } else if (first_set_nibble_printed && (!nibble_value)) {
                printf("0");
            }
        }
        break;
    }
}

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