>>172
新しく確保するよりバッファを渡す方がCらしいわな。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* to_radix_n(unsigned int x, char* s, int n) {
    int index = 0, left = 0, digit;
    char temp;
    do {
        digit = x % n;
        s[index++] = digit > 9 ? digit - 10 + 'A' : digit + '0';
    } while (x /= n);
    s[index--] = '\0';
    while (left < index) {
        temp = s[left];
        s[left++] = s[index];
        s[index--] = temp;
    }
    return s;
}
unsigned int from_radix_n(char* s, int n) {
    unsigned int x = 0, i, len;
    for (i = 0, len = strlen(s); i < len; i++) (x *= n) += isdigit(s[i]) ? s[i] - '0' : toupper(s[i]) - 'A' + 10;
    return x;
}
int main(void) {
    char s1[256], s2[256];
    printf("Enter Number:"); scanf("%255s", s1);
    printf("%s(16) = %s(2)\n", s1, to_radix_n(from_radix_n(s1, 16), s2, 2));
    printf("Enter Number:"); scanf("%255s", s1);
    printf("%s(16) = %s(2)", s1, to_radix_n(from_radix_n(s1, 2), s2, 16));
}