假设我被要求找到前1000个数字的阶乘,并将它们存储在1000大小的数组中。即array[0]=1,array[1]=1!=1.array[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。示例-模值3414
array[568] = 2844
array[569] = 0
array[570] = 0
array[571] = 0
等等。请帮我做些什么来避免这件不幸的事情。我不知道这是对是错。就像如果我必须在另一个数学公式中使用阶乘,那么它要么不加,要么乘0(无论是哪种情况)。可以接受吗?如果不是,那该怎么办呢。
在运行时找到一个函数来测试"i"的大小(应该是int,通常是32位,所以是2^32),如果生成的值大于这个大小,则中断循环。