我对C ++中的模数有疑问。我试图做的是划分一个非常大的数字,例如,M%2,其中M = 54,302,495,302,423。但是,当我去编译时,它说int的数字是'long'。然后当我将其切换为double时,它会重复相同的错误消息。有没有办法我可以做到这一点,我将得到这个非常大的数字的剩余部分或可能更大的数字?非常感谢您的帮助。
答案 0 :(得分:3)
您可以尝试将数字存储在“long long”(64位整数值)中,请注意,如果您的应用程序是多线程的并且在32位CPU上运行,则在读取时需要在线程之间进行同步/写入该值,因为读/写需要2个时钟周期。
或者,尝试bignum library
如果你想让事情变得有趣,如果你只做模2,你可以检查最低位并得到答案。如果你只做模数255,你可以取最低8(无符号字符)位并对它们进行操作。如果你只做模数65535,你可以取最低的16位(无符号短路)并对它们进行操作。
答案 1 :(得分:2)
答案 2 :(得分:0)
整数范围仅为-2,147,483,648至2,147,483,647。校验 http://msdn.microsoft.com/en-us/library/s3f49ktz(VS.71).aspx表示数据类型范围。我推荐很长一段时间。
答案 3 :(得分:0)
提示:使用链接列表。将数字动态存储为一组数字。例如:
1 12233445566778899001122 => 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可以支持的最大范围内。