2014-10-11 114 views
-4

我想找到一个非常长的数字的余数。我正在为此编写一个程序,因为我不能直接找到剩余的,因为它们是大数字(在c中)。我该如何做?限制用于从我不得不分割更大数目找到余数为500.ie 1至500 我想分割数这样的:如何找到余数?

1234567 = 1 * 10^6 + 2 * 10^5 + ...

1234567%×= 1modx * 10^6modx + 2modx * 10^5modx ...

我需要一个更好的比这更方式。

+0

http://en.wikipedia.org/wiki/Modulo_operation – 2014-10-11 13:16:45

+0

我需要一个更具体的答案,然后这个:) – user3851486 2014-10-11 13:17:46

+0

使用模运算% – 2014-10-11 13:18:31

回答

1

提示: 使用链接列表。将号码动态存储为一组数字。 对于如:

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

能告诉我关于操作的一点点......这似乎是一项艰巨的任务 – user3851486 2014-10-11 13:42:04

+0

@ user3851486:如果你对答案满意, upvote :) :) – Inquisitive 2014-10-11 13:52:04

+0

@ user3851486:我也可以得到最好的答案:P – Inquisitive 2014-10-11 14:30:46

0

如果您的问题使用很长或很大的数字尝试使用的东西long long。问题可能在于您使用的数据类型太小而无法保存所需的值。

你可以尝试使用像GMP这样的标准库,或者使用另一种比较丑陋的方式来使用数组或列表,有点类似于this

除此之外,模运算%将为您计算余数。

+0

它可能包含10000位数字。 – user3851486 2014-10-11 13:23:21

+0

好的。然后尝试一个大数字库。像[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

+0

我不想使用这样的库。您有任何其他解决方案吗? – user3851486 2014-10-11 13:25:22