输入的数 n <= 1000 ,用 double 型也不够会溢出。供参考:
#include <stdio.h>
int main()
{
int i, n;
double t = 1.0, s = 1;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
t *= i;
s += 1.0 / t;
}
printf("%.8f", s);
return 0;
}
题主的代码这么改下,见注释,供参考:
#include <stdio.h>
int main()
{
int n;
double b;
b = 0;
scanf("%d", &n);
int i;
double a = 1.0; //int a = 1; a 是求阶乘的变量,用 int 型不合适
for (i = 1; i <= n + 1; i++) //for (i = 0; i <= n + 1; i++)
{ //因为 b 初始值为 0 ,求阶乘在后,所以循环里退出条件 i <= n+1
b += 1.0 / a;
a *= i;
}
printf("%.8f", b);
return 0;
}
for循环i=0不对,改为i=1
int a最好改为double a
n<=1000,太大了