#include<stdio.h>
#include<math.h>
long f(long n);
int main()
{
long n,i;
double s = 1.0;
double d;
scanf("%ld",&n);
if(n > 1000||n < 0){
return 0;
}
for(i = n;i > 0;i--){
d = 1.0/f(i);
s += d;
}
printf("%.8lf",s);
return 0;
}
long f(long n)
{
long i,f = 1;
for(i = n;i > 0;i--){
f *= i;
}
return f;
}
出现1.#INF000情况:
可能1:对于条件端子的初始设置错误,出现了分母为零而使式子无意义的情况
可能2:变量被无限放大,超出了float或double能表示的范围
解决:换另一个变量进行保存
更改:
#include<stdio.h>
double f(int n);
int main()
{
int n,i;
double s = 1.0;
scanf("%d",&n);
if(n > 1000||n < 0){
return 0;
}
for(i = n;i > 0;i--){
s += 1.0/f(i);
}
printf("%.8lf",s);
return 0;
}
double f(int n)
{
double f = 1;
int i;
for(i = n;i > 0;i--){
f *= i;
}
return f;
}
此题就是改成double,函数返回类型为double,存储够
(1)1.#INF: 表示无穷小
(2)-1.#IND: 做除法时除数为0
(3)1.#INF000:正无穷大
(4)-1.#INF000:负无穷大