2015-02-10 35 views
0

假设我被要求查找前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 *阵列[I - 1])%MOD变为0,并从那里所有的阶乘值高达1000得到0值。 示例 - 对于mod值3414

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

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

+1

您可以编辑以包含您认为对此结果不幸的内容吗? (提示:3414的因素是什么?) – DSM 2015-02-10 22:00:05

+0

@DSM根据需要编辑。 – 2015-02-10 22:07:33

+0

我会建议你在纸上写出你认为'array [569]'应该是什么的。 – Teepeemm 2015-02-10 22:42:06

回答

-1

在运行时找到一个函数来测试“i”的大小(应该是一个int,通常是32位,所以2^32),如果生成的值大于这个大小,则打破循环。