我想找到一个非常长的数字的余数。我正在为此编写一个程序,因为我不能直接找到剩余的,因为它们是大数字(在c中)。我该如何做?限制用于从我不得不分割更大数目找到余数为500.ie 1至500 我想分割数这样的:如何找到余数?
1234567 = 1 * 10^6 + 2 * 10^5 + ...
1234567%×= 1modx * 10^6modx + 2modx * 10^5modx ...
我需要一个更好的比这更方式。
我想找到一个非常长的数字的余数。我正在为此编写一个程序,因为我不能直接找到剩余的,因为它们是大数字(在c中)。我该如何做?限制用于从我不得不分割更大数目找到余数为500.ie 1至500 我想分割数这样的:如何找到余数?
1234567 = 1 * 10^6 + 2 * 10^5 + ...
1234567%×= 1modx * 10^6modx + 2modx * 10^5modx ...
我需要一个更好的比这更方式。
提示: 使用链接列表。将号码动态存储为一组数字。 对于如:
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可以支持。
能告诉我关于操作的一点点......这似乎是一项艰巨的任务 – user3851486 2014-10-11 13:42:04
@ user3851486:如果你对答案满意, upvote :) :) – Inquisitive 2014-10-11 13:52:04
@ user3851486:我也可以得到最好的答案:P – Inquisitive 2014-10-11 14:30:46
如果您的问题使用很长或很大的数字尝试使用的东西long long
。问题可能在于您使用的数据类型太小而无法保存所需的值。
你可以尝试使用像GMP这样的标准库,或者使用另一种比较丑陋的方式来使用数组或列表,有点类似于this。
除此之外,模运算%
将为您计算余数。
它可能包含10000位数字。 – user3851486 2014-10-11 13:23:21
好的。然后尝试一个大数字库。像[GMP](https://gmplib.org/)。也许你可以看看[这里](http://stackoverflow.com/questions/2440093/how-to-find-the-remainder-of-large-number-division-in-c)。 – Gordonium 2014-10-11 13:24:41
我不想使用这样的库。您有任何其他解决方案吗? – user3851486 2014-10-11 13:25:22
http://en.wikipedia.org/wiki/Modulo_operation – 2014-10-11 13:16:45
我需要一个更具体的答案,然后这个:) – user3851486 2014-10-11 13:17:46
使用模运算% – 2014-10-11 13:18:31