84 求級數的和
作者: Turbo時間限制: 1S章節: 循環
問題描述 :
計算以下級數的和:
直到最後一項的絕對值小於10-6(該項不包括在結果中)。
輸入說明 :
輸入一個實數,代表x。
輸出說明 :
輸出結果,保留六位小數。整個輸出無多餘空格。
輸入範例 :
2.5
輸出範例 :
1.917914
筆記
若要使若干數相乘的結果爲實屬,且保證精度儘可能不錯,應將所有參與的乘數變量定義爲實屬。
代碼
#include<stdio.h>
#include<math.h>
const double eps = 1e-8;
#define MoreEqu(a,b) ((a)-(b)>(-eps))
double fac[101];
void init_fac(){
fac[0] = 0;
fac[1] = 1;
int i;
for(i=2;i<101;i++)
fac[i] = fac[i-1] * i;
}
int main(){
double x;
scanf("%lf",&x);
init_fac();
int n = 1;
double sig = 1;
double sum = 1;
double xx = x;
while(MoreEqu(xx/fac[n],1e-6)){
sum += sig * xx/ fac[n];
xx *= x;
n++;
sig *= -1;
}
printf("%f\n",sum);
return 0;
}