这题做不来啦 求用C语言解题的代码

img

供参考:

#include<stdio.h>
#include<math.h>
double happy(double a);
double a;
int main()
{
    while(scanf("%lf",&a)!=EOF){
          printf("%.6lf",happy(a));
    }
    return 0;
}

double happy(double a)
{
    double n = a/2,m = (n+a/n)/2;
    while(fabs(n-m) > 1e-6)
    {
        n = m;
        m = (n+a/n)/2;
    }
    return m;
}

代码挺简单的,不过这个求解过程有点意思。

  1. 实际就是 f(x) = x * x - n, f(x) = 0时,n的平方根x的值,就是和x轴的交点。
  2. 这个就是不断的做切线和获取x轴的焦点,进而不断地逼近交点。所以就有了精确度。

给你附两个链接看看详细原理:


牛顿迭代法求平方根(通俗易懂版)_付石头的博客-CSDN博客 五次及以上多项式方程没有根式解(就是没有像二次方程那样的万能公式),这个是被伽罗瓦用群论做出的最著名的结论。但是,没有王屠夫难道非得吃带毛猪?工作生活中还是有诸多求解高次方程的真实需求(比如行星的轨道计算,往往就是涉及到很复杂的高次方程),这日子可怎么过下去啊?没有根式解不意味着方程解不出来,数学家也提供... https://blog.csdn.net/u010947534/article/details/87874019