Как преобразовать произвольное большое целое число из базы 10 в базу 16?

Программа требует ввода произвольного большого целого числа без знака, которое выражается одной строкой в базе 10. Выходными данными является другая строка, которая выражает целое число в базе 16.

Например, вход «1234567890987654321234567890987654321234567890987654321», а выход «CE3B5A137DD015278E09864703E4FF9952FF6B62C1CB1»

Чем быстрее алгоритм, тем лучше.

Это будет очень легко, если ввод ограничен 32-битным или 64-битным целым числом; например, следующий код может выполнить преобразование:

#define MAX_BUFFER 16
char hex[] = "0123456789ABCDEF";

char* dec2hex(unsigned input) {
    char buff[MAX_BUFFER];
    int i = 0, j = 0;
    char* output;

    if (input == 0) {
        buff[0] = hex[0];
        i = 1;
    } else {
        while (input) {
            buff[i++] = hex[input % 16];
            input = input / 16;
        }
    }

    output = malloc((i + 1) * sizeof(char));
    if (!output) 
        return NULL;

    while (i > 0) {
        output[j++] = buff[--i];        
    }
    output[j] = '\0';

    return output;
}

Реальная сложная часть - «произвольно большое» целое число без знака. Я гуглил, но большинство из них говорят о преобразовании в 32-разрядной или 64-разрядной версии. Не удача найдена.

Кто-нибудь может дать какой-нибудь хит или любую ссылку, на которую можно прочитать?

Заранее спасибо.

редактировать Это вопрос интервью, с которым я столкнулся недавно. Кто-нибудь может кратко объяснить, как решить эту проблему? Я знаю, что есть библиотека gmp, и я использовал ее раньше; однако в качестве вопроса для собеседования требуется не использовать внешнюю библиотеку.

Ответы на вопрос(7)

Ваш ответ на вопрос