#include <bits/stdc++.h>
using namespace std;
 
double f(double co[], int n, double x) {
    double result = co[0];
    for (int i = 1; i <= n; i++)
        result = result * x + co[i];
    return result;
}
 
double df(double co[], int n, double x) {
    double result = co[0] * n;
    for (int i = 1; i < n; i++)
        result = result * x + co[i] * (n - i);
    return result;
}
 
int main() {
    int n;
    double co[20];
    double x0, x1, fx, dfx, E, error;
    int iteration = 1, maxIter = 20;
 
    cout << "ENTER THE TOTAL NO. OF POWER::: ";
    cin >> n;
 
    for (int i = 0; i <= n; i++) {
        cout << "x^" << i << " :: ";
        cin >> co[i];
    }
 
    cout << "\nTHE POLYNOMIAL IS ::: ";
    for (int i = n; i >= 0; i--) {
        cout << co[n - i] << "x^" << i << " ";
    }
    cout << endl;
 
    cout << "\nEnter initial guess x0: ";
    cin >> x0;
    cout << "Enter tolerance (e.g. 0.0001): ";
    cin >> E;
 
    cout << "\n***********************************************";
    cout << "\nIteration\t x\t\t f(x)\t\t f'(x)\t\t Error\t\t %Error";
    cout << "\n***********************************************\n";
 
    while (iteration <= maxIter) {
        fx = f(co, n, x0);
        dfx = df(co, n, x0);
 
        if (dfx == 0) {
            cout << "Division by zero!.\n";
            return 0;
        }
 
        x1 = x0 - fx / dfx;
        error = fabs((x1 - x0) / x1);
 
        cout << fixed << setprecision(6);
        cout << setw(5) << iteration << "\t"
             << setw(10) << x1 << "\t"
             << setw(10) << fx << "\t"
             << setw(10) << dfx << "\t"
             << setw(10) << error << "\t"
             << setw(10) << error * 100 << endl;
 
        if (error < E)
            break;
 
        x0 = x1;
        iteration++;
    }
 
    cout << "\n***********************************************";
    cout << "\nTHE ROOT OF EQUATION IS " << x1 << endl;
    cout << "***********************************************\n";
 
    return 0;
}