美文网首页
剑指offer 16 double的幂运算

剑指offer 16 double的幂运算

作者: 再凌 | 来源:发表于2020-04-29 21:55 被阅读0次

    实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

    注意:

    image.png

    这道题一个陷阱就是int的范围是-2147483648到2147483647, 负数不能直接取绝对值!!

    如果单独记住一个-1, 那么又要考虑到偶数次幂的结果是正数的问题!!

    
    double myPow(double x, int n){
        double result;
        double odd=1.0;
        int minusFlag = 0;
        if((n == 0) ||(x == 1.0))
            return 1.0;
        if(x == 0.0) return 0.0;
        else if(n < 0)//负数次幂转换为正数
        {
            x = 1/x;
            if(n == -2147483648)    {minusFlag = 1; n++;}
            n = -n;
        }
        result = x;
    
    
        while( n > 1)
        {
            if(n%2 == 0)
            {
                result *= result;
                n /= 2;
            }
            else{   //所有奇数次幂单独拿出来记录
                odd *=result;
                n--;
            }
        }
        result *= odd;
        if(minusFlag)//如果是边界数,要考虑结果是正数和在进行一次除运算
        {
             result /= x;
             if(result<0) result = -result;
        }
        return result;
    
    }
    

    相关文章

      网友评论

          本文标题:剑指offer 16 double的幂运算

          本文链接:https://www.haomeiwen.com/subject/pcsowhtx.html