测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A27067. 有关下面C++代码的说法,错误的是( )。double sqrt binary(long longn, double epsilon = 1e-10){ if(n< 0){ throw invalid argument("输入必须为非负整数”); } if(n==0n==1)return n; // 阶段 1 long long low=1,high = n; long long k=0; wh…

单选题 困难

题目描述

有关下面C++代码的说法,错误的是(    )。

double sqrt binary(long longn, double epsilon = 1e-10){
    if(n< 0){
        throw invalid argument("输入必须为非负整数”);
    }
    if(n==0n==1)return n;
    // 阶段 1
    long long low=1,high = n;
    long long k=0;

    while(low<= high){
        long long mid=(low+high)/2;
        long long mid_sq= mid * mid;

        if(mid sq== n){
            return mid;
        }else if(mid_sq<n){
            k= mid;
            low = mid + 1;
        }else {
            high = mid-1;
        }
    }
    long long next k=k+ 1;
    if(next_k*next_k== n){
        return next_k;
    }
    // 阶段 2
    double low_d=(double)k;
    double high_d=(double)(k+1);
    double mid;

    while(high_d-low_d>=epsilon){
        mid=(low_d+high_d)/2;
        double mid_sq= mid * mid;

    if(mid sq <n){
        low_d= mid;
    }else {
            high_d= mid;
        }
    }
    double result=(low_d+ high_d)/2;
    long long check_int=(long long)(result + 0.5);
    if(check_int*check_int == n){
        return check_int;
    }
    return result;
}

选项(单选)

上一题 下一题