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