我想将返回值pow(2.0,(n-8))
除以 86399。问题是10 <= n <= 100000000
。
如何处理这么大的返回值?
我在 Ubuntu 11.10 64 位,使用 C++ 4.0.0-8
除非您使用大数字库,否则您不能。64 位不能容纳那么大的数字。即便如此,也可能需要一段时间。2^(86392) 中有大约 26000 个数字。
如果你只想得到一个模数,有一些很好的算法。请参阅http://en.wikipedia.org/wiki/Modular_exponentiation。
如果您还想尝试 bignums,请查看http://gmplib.org/。
一种非常简单的方法是使用 GMP—— http ://gmplib.org/
这个讨论应该回答你的问题Modular Exponentiation for high numbers in C++
对于这么大的数字,你必须做一些聪明的事情。如果没有 bigint 库,你就无法以任何合理的方式天真地表示这个完整的数字,即便如此,它对于蛮力来说真的太大了。该数字本身将占用数十兆字节。