美文网首页
剑指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