gpt4 book ai didi

c++ - 如何将大整数转换为基数 2^32?

转载 作者:行者123 更新时间:2023-11-28 01:02:39 25 4
gpt4 key购买 nike

首先,我这样做是为了我自己,所以请不要建议“使用 GMP/xint/bignum”(如果它适用的话)。

我正在寻找一种将大整数(例如,超过 9000 位数字)转换为 232 表示形式的 int32 数组的方法。这些数字将以 10 进制字符串开始。

例如,如果我想将刚刚超过 INT_MAXstring a = "4294967300"(以 10 为基数)转换为新的以 2 为基数的 32 数组,它将是 int32_t b[] = {1,5}。如果 int32_t b[] = {3,2485738},则以 10 为底的数字将为 3 * 2^32 + 2485738。显然,我将使用的数字甚至超出了 int64 的范围,因此我无法将字符串准确地转换为整数并修改我的成功之路。

我有一个以 10 为基数做减法的函数。现在我想我会做 subtraction(char* number, "2^32") 并计算之前的次数我得到一个负数,但对于更大的数字,这可能需要很长时间。

有人可以建议不同的转换方法吗?谢谢。

编辑
抱歉,如果您没有看到标签,我正在使用 C++

最佳答案

假设你的 bignum 类已经有了乘法和加法,这很简单:

 bignum str_to_big(char* str) {
bignum result(0);
while (*str) {
result *= 10;
result += (*str - '0');
str = str + 1;
}
return result;
}

转换成另一种方式是同一个概念,但是需要除法和取模

std::string big_to_str(bignum num) {
std::string result;
do {
result.push_back(num%10);
num /= 10;
} while(num > 0);
std::reverse(result.begin(), result.end());
return result;
}

这两个都只适用于未签名的。

关于c++ - 如何将大整数转换为基数 2^32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7987434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com