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



假设我被要求找到前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),如果生成的值大于这个大小,则中断循环。

相关内容

最新更新