数值的整数次方

题目

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

解法

class Solution {
private:
    double myPowCore(double x, int n) {
        if (n == 0) {
            return 1;
        }

        double res = myPowCore(x, n/2);
        if(n & 1) {
            return res * res * x;
        }
        else {
            return res * res;
        }
    }
public:
    double myPow(double x, int n) {
        if(n == 1 || n == 0) {
            return n == 1 ? x : 1;
        }

        if(n > 0){
            return myPowCore(x, n);
        }
        return myPowCore(1/x, n);
    }
};

拓展

  1. 求a的n次方公式如下
        a^n/2*a^n/2
a^n=
        a^(n-1)/2*a(n-1)/2*a

   2.用位运算&左移一位代表除以2,用与运算代替取余(%2)来判断是否是奇数。位运算效率更加高

   3.用于判定两个 double 型数据是否相等,不能直接用 == 只能用两者之间的差值在一个很小的范围内来判断