牛客小白月赛102-B-连分数 · znzryb
## 题目大意
求解无限连分数 x = a + 1/(a + 1/(a + ...)) 的值。即求解方程 x = a + 1/x 的正根。
AC代码 牛顿迭代法
$$
x=a + \frac{1}{a + \frac{1}{a + \frac{1}{a + \cdots}}}
$$
因为是无限的递归,可以把a下面的看成一个整体,其实也是x,然后你就把这个问题转化成了求一元二次方程。
$$
x = a + \frac{1}{x}
$$
```cpp
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int T;
double a;
double solve(double a) {
// 使用公式直接计算连分数的解
return (a + sqrt(a * a + 4)) / 2;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> T;
for(int _ = 1; _ <= T; _++) {
cin >> a;
double ans = solve(a);
cout << setprecision(24) << ans << endl;
}
return 0;
}
// AC https://ac.nowcoder.com/acm/contest/view-submission?submissionId=71962585
```