已知函数 e 的 x 次方可以展开为幂级数 1 + x + x²/2! + x³/3! + ….。现给定一个实数 x,要求利用此幂级数部分和求 e 的 x 次方的近似值,求和一直继续到最后一项的绝对值小于 0.00001。
输入格式:
输入在一行中给出一个实数 x∈[0,5]。
输出格式:
在一行中输出满足条件的幂级数部分和,保留小数点后四位。
输入样例:
1.2
输出样例:
3.3201
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/12/exam/problems/288
提交:
题解:
#include<stdio.h>
#include<math.h>
/*
* 递归计算 n 的阶乘
*/
double fact(int n) {
// 递归出口
if (n == 0 || n == 1) {
return 1;
}
return n * fact(n - 1);
}
int main(void) {
double x;
scanf("%lf", &x);
int i = 1;
double sum = 1;
double item = x / 1;
// 当最后一项的绝对值不小于给定精度时进入循环
while (fabs(item) >= 0.00001) {
sum += item;
i++;
// 求解第 i 项,分母部分为 x 的 i 次方,分子部分为 i 的阶乘
item = pow(x, i) / fact(i);
}
// 题目要求 “求和一直继续到最后一项的绝对值小于 0.00001”
printf("%.4lf\n", sum + item);
return 0;
}