在C中存储和使用大数字

Mar*_*cny 17 c exponentiation

我需要帮助处理非常大的数字.根据Windows calc,指数

174^55 = 1.6990597648061509725749329578093e+123 
Run Code Online (Sandbox Code Playgroud)

我如何使用C(c99标准)存储?

int main(){
  long long int x = 174^55; //result is 153
  printf("%lld\n", x);
}
Run Code Online (Sandbox Code Playgroud)

And*_*Dog 25

C中的普通类型通常只能存储64位,因此您必须在数组中存储大数字,并自行编写数学运算.但你不应该在这里重新发明轮子 - 你可以尝试使用GNU多精度算术库来实现这个目的.

正如评论已经指出的那样,^操作是二进制异或.对于取幂,你将不得不使用像数学函数那样的函数pow.


Mic*_*and 5

如果近似值正常,则可以使用浮点(floatdouble)数字.而且,正如评论者所说,你需要而pow不是^.

但是,对于加密,近似不起作用.你需要支持非常大的整数运算.GMP提供通用的多精度算术支持.许多加密软件包在其代码中也会有这样的算法,可以通过第三方库或内置; PuTTY有一个用于大整数的bignum库,OpenSSL可能有类似的东西.

基本的C数据类型是不够的.