#include <stdio.h> #include <stdint.h> __attribute__((noinline)) int morph_posint_radix( char * in, char * out ) { uint64_t value = 0; while( *in ) { if( *in >= '0' && *in <= '9' ) { value *= 10; value += *in - '0'; } else return -1; in++; } uint64_t v = value; while( v ) { out ++; v /= 16; } *out-- = '\0'; while( value ) { unsigned digit = value % 16; if( digit < 10 ) { *out-- = digit + '0'; } else if( digit < 16 ) { *out-- = digit + 'a' - 10; } else { return -1; } value /= 16; } return 0; } int main() { char bufA[1024]; char bufB[1024]; char * in = bufA; char * out = bufB; scanf("%s", in); morph_posint_radix( in, out ); printf("%s\n", out); return 0; }