C语言求1到20阶乘的和,出来的是负数

2024-12-02 02:37:04
推荐回答(3个)
回答1:

long double 改为 double,

%d 改为 %lf 

#include 

int main()
{
  double s = 0, t = 1, n;
  for (n = 1; n <= 20; n++)
  {
    t *= n;
    s += t;
  }
  printf("1!+2!+3!+...+20! = %.0lf\n",s);
  return 0;
}
// 输出:1!+2!+3!+...+20! = 2561327494111820288

 另外,你的程序求的是 19!。

回答2:

溢出整数范围而已。
long double 改为long long,最后printf用llf ,别问为什么,我也不知道,程序硬性要求,int用%d,long用ld,long long 用lld
输出控制符,你们老师应该讲过的。

回答3:

printf("1!+2!+3!+...+20!=%d\n",s);

改成
printf("1!+2!+3!+...+20!=%.0lf\n",s);

double输出的时候不是%d 是 lf