33,321
社区成员




#include <iostream>
using namespace std;
double sign(int n) // (-1)的n + 1次方
{
if(n%2 == 0)
return (double)-1.0;
else
return (double)1.0;
}
long factorial(long n) //计算n的阶乘
{
long result = 1; // 先将结果设定为1,因为1! = 1,
if(n > 1) // 如果n > 1
{
result = factorial(n - 1) * n; // 比如3的阶乘 = factorial(2) * 3
}
else // 否则 n = 1
{
result = 1 * result; // 由于factorial(1) = factorial(0) * 1,其中
} // factorial(0)在此程序中未被定义,因此可视为递归的
return result; // 结束条件,并将factorial(0)设置成了1
}
double power(double x, int n) // 计算x的n次方
{
double y = (double)1.0;
for(int i = 0; i < n; i++)
y = y * x;
return y;
}
double calculateSeries(int n, double x) // 计算级数1+x-x^2/2!+x^3/3!-...(-1)^(n+1) * x^n/n!
{
double result = (double)1.0;
for(int i = 1; i <= n; i++)
{
result = result + (double)(sign(i) * power(x, i) / factorial(i));
}
return result;
}
int main(void)
{
double error = 100.0;
double x = (double)1.0; // 假定x = 1.0
int i = 1;
do
{
i++;
error = calculateSeries(i, x) - calculateSeries(i - 1, x);
error = (error > 0) ? (error) : (0 - error);
}
while(error > 0.00001); // 如果误差大于0.00001,可在此设定误差
cout << i << endl;
cout << calculateSeries(i, x) << endl;
return 0;
}