我需要帮助处理非常大的数字。根据 Windows calc,指数
174^55 = 1.6990597648061509725749329578093e+123
我将如何使用 C(c99 标准)存储它?
int main(){
long long int x = 174^55; //result is 153
printf("%lld\n", x);
}
我需要帮助处理非常大的数字。根据 Windows calc,指数
174^55 = 1.6990597648061509725749329578093e+123
我将如何使用 C(c99 标准)存储它?
int main(){
long long int x = 174^55; //result is 153
printf("%lld\n", x);
}
C 中的普通类型通常最多只能存储 64 位,因此您必须在数组中存储大数字,并自己编写数学运算。但是您不应该在这里重新发明轮子——您可以为此尝试使用GNU 多精度算术库。
正如评论已经指出的那样,该^
操作是二进制 XOR。对于求幂,您将不得不使用数学函数,例如pow
.
如果近似值可以,您可以使用浮点 (float
或double
) 数。正如评论者所说,你需要pow
,而不是。^
但是,对于密码学,近似不起作用。您需要支持非常大整数的算术运算。GMP 提供通用的多精度算术支持。许多加密包也会在其代码中包含此类算法,通过第三方库或内置;PuTTY 有一个用于大整数的 bignum 库,OpenSSL 可能也有类似的东西。
基本的 C 数据类型是不够的。
您可以将其存储在整数数组中。一个 64 位整数就是 2 个 32 位整数。一个 1024 位整数也可以看作是 32 个 32 位整数。