如何在C++中找到大数除法的余数?

3
我有一个关于C++中取模的问题。我想要做的是将一个非常大的数字进行除法运算,例如 M % 2,其中M = 54,302,495,302,423。然而,当我尝试编译时,它显示该数字对于int类型来说太“长”了。当我将其转换为double类型时,它重复了相同的错误消息。是否有一种方法可以让我得到这个非常大的数字或者可能更大的数字的余数?谢谢你的帮助,非常感激。
4个回答

3
你可以尝试将数字存储在“long long”(64位整数值)中,但请注意,如果您的应用程序是多线程的,并且在32位CPU上运行,则需要在读/写此值时在线程之间进行同步,因为读/写操作需要2个时钟周期。
或者,尝试使用bignum library
如果你想让事情变得有趣一些,如果你只做模2,你可以检查最低位并获得答案。如果您只做模255,您可以取最低8(无符号字符)位并对它们执行操作。如果您只做模65535,您可以取最低16位(无符号短整型)并对其执行操作。

2
在C++中进行大数运算,可以使用GMP库。特别地,mpz_mod函数可以实现此功能。
为了更自然的C++封装,mpz_class类可以通过提供多精度操作的运算符重载来帮助实现。

0

提示:使用链表。将数字作为一组数字动态存储。例如:

112233445566778899001122 => 11223344 55667788 99001122

现在考虑单个单位并从左到右开始。找到余数并操纵它以添加到下一组并继续进行。

现在实现非常容易 :)

编辑:

112233445566778899001122/6 =>  11223344 55667788 99001122/6


 11223344/6 =>2

 2*100000000 + 55667788 = 255667788
 255667788/6 => 0
 0*100000000 + 99001122 = 99001122
 99001122/6=>0

 So the reminder is 0.

记住,操作后的单个单位应该在int能支持的最大范围内。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接