#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;
}
Input
10 2
Expected Output
1010