情况一:不考虑大数的情况
算法思想:直接上代码,简单易懂。
代码描述:
int fac(int n){
int p=1, sum=0;
for(int i=1; i<=n; i++){
p = p*i;
sum = sum+p;
}
printf("%d",sum);
return sum;
}
情况二:大数阶乘,求末六位
算法思想: 此时需要注意溢出和时间的问题
溢出解决方案:
根据(a + b) % n = a % n + b % n的原理,要计算加法、减法和乘法的整数表达式除以正整数n的余数,可以再每步计算之后对n取余,结果不变。
时间长的解决方案:
注意到25!的阶乘有末尾6个0,则有(a + b) % n = a % n。也就说如果n大于24就相当于只计算n为24。
代码描述:
#define MOD 1000000
int fac(int n){
int p=1, sum=0;
if(n>24)
n=24;
for(int i=1; i<=n; i++){
p = p*i%MOD;
sum = sum+p;
}
printf("%d",sum%MOD);
return sum;
}