该程序需要输入一个任意大的无符号整数,该整数用十进制表示为一个字符串。输出是另一个字符串,以十六进制表示该整数。
例如,输入为“1234567890987654321234567890987654321234567890987654321”,输出应为“CE3B5A137DD015278E09864703E4FF9952FF6B62C1CB1”。
算法速度越快越好。
如果输入限制在32位或64位整数内,那么转换将非常容易;例如,以下代码可以完成转换:
真正具有挑战性的部分是“任意大”的无符号整数。我已经搜索了谷歌,但大多数都是关于32位或64位内转换的讨论。没有找到合适的结果。请问有人能给出任何提示或可供阅读的链接吗?提前致谢。
编辑:这是我最近遇到的一个面试问题。有人能简要解释如何解决这个问题吗?我知道有一个gmp库,我以前用过它,但作为一个面试问题,它要求不使用外部库。
例如,输入为“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库,我以前用过它,但作为一个面试问题,它要求不使用外部库。