このプログラムでは、基数 10 の 1 つの文字列として表現される任意の大きな符号なし整数の入力が必要です。出力は基数 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 ライブラリがあることは知っており、以前はそれを利用していました。ただし、インタビューの質問として、外部ライブラリを使用しない必要があります。