算法题 — x 的平方根,二分查找、牛顿迭代

文章介绍了如何在不依赖于sqrt()函数的情况下,利用二分法和牛顿迭代法来计算给定数x的整数平方根。通过二分搜索找到可能的平方根范围,然后用牛顿迭代不断逼近精确值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在不使用 sqrt(x) 函数的情况下,得到 x 的平方根的整数部分。

重点考察:二分法、牛顿迭代。

二分法:

public static int binarySearch(int x) {
    int index = -1, left = 0, right = x; // 索引值、左边界、右边界
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (mid * mid <= x) {
            index = mid;
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return index;
}

牛顿迭代:

假设 n 的平方根是 x,也就是 x * x= n,那么,n 和 n/x 都是 n 的因子,而且 n 必定是等于 n/x 的,也就是 n/x + x = 2 * x,也就是 x = (n/x + x)/2。

其中,x 可以选 0~n 中的任意值,如果满足 x = (n/x + x)/2,x 即为 n 的平方根,否则根据 x = (n/x + x)/2 得到的值进行递归循环,直至得到结果。

public static int newton(int n) {
    if (n == 0 || n == 1) {
        return n;
    }
    return (int) sqrt(n, n);
}

public static double sqrt(double i, int n) {
    double res = (i + n / i) / 2;
    if (res == i) {
        return i;
    } else {
        return sqrt(res, n);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值