面试算法题:求一个数的立方根

题目:不用库函数求某数的立方根。

若使用库函数,则直接用 pow((double)n,(double)1/3)

这个题目可以扩展,如果不是求立方根,而是求整数次方根可以参考:https://blog.csdn.net/qq_21997625/article/details/88086987

方法一:使用数学方法,就是logn(a^b)=b*logn(a),而exp(logn(a))=a,这里默认n以e为底。那直接求exp(log(a)/3)

#include 
double pow13(int a)
{
    return (double)exp(log(a)/3);
}

方法二:二分搜索,这个需要自己定搜索范围,因为负数也可以有立方根,要考虑这种情况

double func(double x)
{
    if(x==0 || x==1 || x==-1) return x;
    double l=x>0?0:x,r=x>0?x:0;
    while(lx) r=m;          //如果要求保留五位小数t-x<0.00001
        else if(t

方法三:牛顿迭代法。(x/(y^2)+2y)/3

float fun(float guess,float x)
{
    if(abs(guess*guess*guess-x)<0.0000001) return guess;
    else
    return fun((x/guess/guess+2*guess)/3,x);
}

方法四:若要求保留两位小数, 从0开始加0.05每次,一直加到满足条件

你可能感兴趣的:(数据结构/算法/刷题,求一个数的立方根,牛顿迭代法)