All submissions

Convert Integer to Hex String Without sprintf or itoa functions

Code

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

const uint16_t digit[16]= {'0', '1', '2', '3', '4', '5', '6', '7', '8',
                            '9', 'A', 'B', 'C', 'D', 'E', 'F'};
                            
void print_hex(uint16_t num) {
    uint16_t mask= 0xF000;
    uint16_t nib3, nib2, nib1, nib0;

    nib3 = (mask & num) >> 12;
    if (nib3 != 0) {
        printf("%c", digit[nib3]);
    }

    mask = mask >> 4;
    nib2 = (mask & num) >> 8;
    if (nib2 != 0) {
        printf("%c", digit[nib2]);
    }
    else if (nib3 != 0) {
        printf("%c", digit[nib2]);
    }

    mask = mask >> 4;
    nib1 = (mask & num) >> 4;
    if (nib1 != 0) {
        printf("%c", digit[nib1]);
    }
    else if ((nib3 != 0) || (nib2 != 0)) {
        printf("%c", digit[nib1]);
    }

    mask = mask >> 4;
    nib0 = (mask & num);
    printf("%c", digit[nib0]);

    // Your logic here
}

int main() {
    uint16_t num;
    scanf("%hu", &num);
    print_hex(num);
    return 0;
}

Solving Approach

Look at each nibble by bitwise AND with a rolling mask

mask rolls 4 bits to the right after every digit

print a zero only if there was a leading number, unless the number is all zero,

 

 

Loading...

Input

255

Expected Output

FF