二分法/牛顿迭代 求平方根

发布于:2023-01-12 ⋅ 阅读:(427) ⋅ 点赞:(0)

该程序,不使用sqrt()函数,计算出x的平方根的整数部分
牛顿迭代,数学方法,使用递归实现。
程序运行结果:
在这里插入图片描述
实现代码:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

//折半法
int my_sqrt1(int x)
{
    int l = 0;
    int r = x;
    int index = -1;
    int mid;

    while(l <= r)
    {
        mid = (l+r)/2;
        if(mid*mid <= x)
        {
            index = mid;
            l = mid + 1;
        }
        else
        {
            r = mid - 1;
        }
    }

    return index;
}

//牛顿迭代
double sqrt_nd(double i, int x)
{
    double ret = (i + x/i)/2;
    if(ret == i)
    {
        return i;
    }
    else
    {
        return sqrt_nd(ret, x);
    }
}
int my_sqrt2(int x)
{
    if(x == 0)
    {
        return 0;
    }

    return (int)sqrt_nd(x,x);
}


int main()
{
    int x;
    scanf("%d",&x);

    int ret = my_sqrt1(x);
    printf("折半法:%d\n",ret);

    ret = my_sqrt2(x);
    printf("牛顿迭代:%d\n",ret);

    return 0;
}
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到