讨论/求职面试/被面试问到的一道题/
被面试问到的一道题

手写 sqrt(x)sqrt(x),与力扣上不同的是,xx 没有限制范围,也就是 xx 可以为负数,也可以在 010-1 之间。要求精度 1e51e-5
对于正整数的开方可以用二分法,
我处理在 010-1 之间的方法是扩大 100100 倍,再用开方的结果除以 1010,但感觉这个方法非常蠢。。。
求问大佬们有没有更好的方法。。。

大概是这样。

#include <iostream>

using namespace std;

const double eps = 1e-8;

double n;

int main() {
    scanf("%lf", &n);
    
    double l = -1e9, r = 1e9;
    while (r - l > eps) {
        double mid = (l + r) / 2;
        if (mid * mid >= n) r = mid;
        else l = mid;
    }
    printf("%lf", l);
    
    return 0;
}
展开全部 8 讨论