两个数字的乘法而不超过数据类型大小限制?

时间:2015-02-10 21:56:51

标签: arrays math module factorial

假设我被要求找到前1000个数字的阶乘并将它们存储在1000个数组中。即 array [0] = 1,array [1] = 1! = 1,....,数组[6] = 6! = 720等等。 但是不要超过数据大小,我已经提供了模块值mod。 现在这就是我正在做的事情。

i = 1;
array[0] = 1;
while(i <= 1000)
{
    array[i] = (i*array[i - 1])%mod;++i;
}

我所面临的问题是某一点(i * array [i - 1])%mod的值变为0,并且从那里所有最多1000的阶乘值得到0值。 示例 - 对于mod值3414

array[568] =  2844
array[569] =  0
array[570] =  0
array[571] =  0

等等。 请帮助我,我该怎么做才能避免这个不幸的事情。我不知道这是对还是错。就像我必须在另一个数学公式中使用阶乘,然后它或者添加任何东西或者乘以0(无论哪种情况)。可以接受吗?如果不是那么可以做什么。

1 个答案:

答案 0 :(得分:-1)

找一个功能来测试&#34; i&#34;的大小。在运行时(应该是一个int,通常是32位,所以2 ^ 32),如果生成的值大于这个大小,则打破循环。