//和csdn上能搜到的其他三位答主不同的是,没有选择用把每一项的值求出来再累加,那样会用到很多变量和阶乘的函数,而采用了老师/视频教的观察式子找规律的解法
AC代码:
#include<stdio.h>
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
long double x = -1, k = -1;
while (cin >> x >> k)
{
long double y = x;
if (k > 1)//特殊情况
{
cout << "0.000000" << endl;
cout<<endl;//注意,有两个换行
continue;
}
long double ans = 1;
for (int i = 0;; i++)
{
if(i>=0)x = x * y * (0.5 - i) / (i + 1);//这两行改了半天,为了避免用到阶乘和超出范围,纯纯的找规律
if(i==0)x = y * 1 * (0.5 - i) / (i + 1);
if (fabs(x) < k)break;//先判断
ans += x;
}
cout << fixed << setprecision(6) << ans << endl;
cout<<endl;//注意,有两个换行
}
//system("pause");
return 0;
}