#include <bits/stdc++.h>
using namespace std;
#define double long double
int main()
{
int n;
cin >> n;
double x[n], y[n];
for (int i = 0; i < n; i++)
{
cin >> y[i];
x[i] = i + 1;
}
double A[n][n];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
A[i][j] = pow(x[i], n - 1 - j);
}
}
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (A[i][i] == 0)
{
for (int k = i; k < n; k++)
{
swap(A[i][k], A[k][k]);
swap(y[i], y[k]);
if (A[i][i] != 0)
break;
}
}
double t = A[j][i] / A[i][i];
for (int k = 0; k < n; k++)
{
A[j][k] -= A[i][k] * t;
}
y[j] -= y[i] * t;
}
}
double a[n];
for (int i = n - 1; i >= 0; i--)
{
a[i] = y[i];
for (int j = i + 1; j < n; j++)
{
a[i] -= a[j] * A[i][j];
}
a[i] /= A[i][i];
}
for (int i = 0; i < n; i++)
{
unsigned long long p, q = 9000;
p = round(abs(a[i]) * q);
int d = __gcd(p, q);
p /= d;
q /= d;
if (i != 0)
cout << ' ';
if (a[i] < 0)
cout << '-';
cout << fixed << setprecision(0) << p << '/' << q;
}
cout << endl;
return 0;
}
经检验基本正确,还需进一步优化 作者:北斗七星魔数战队 gpwzdq.com 出处:bilibili