如何用循环结构求1!+2!+3!+……+20!

img


我不会

20! 是个非常大的数字,使用 unsigned long long int 存储整数得到的是不同的值:

#include <stdio.h>

unsigned long long factorial(int n)  
{  
  if (n == 0)  
    return 1;  
  else  
    return (n * factorial(n-1));  
}  
   
void func() {
    int i,t=1;
    double s = 0;
    for (i=1;i<=20;i++)
    {
        t*=i;
        s += t;
    }
    printf("%g",s);
}
   
int main()  
{  
  unsigned long long sum = 0;
  for (int i = 1; i <= 20; i++)
      sum += factorial(i);
  printf("%llu\n", sum);
  func();
  return 0;  
}  

结果是:
2561327494111820313
4.56301e+09
如果数字再大一些,估计得用第三方库了。

但是 python 天然就支持任意大的表数范围,如果使用 python,

sum = 0
t = 1
for i in range(1, 21):
    t *= i
    sum += t
print(sum)

输出结果是 2561327494111820313


#include <stdio.h>
int main()
{
    int i,t=1;
    double s = 0;
    for (i=1;i<=20;i++)
    {
        t*=i;
        s += t;
    }
    printf("%g",s);
    return 0;
}