此题思路简单明了,重点在于:考虑问题的全面性,即要考虑到当底数为0以及指数为0和负数的情况,将其单列出来。
注意点:1.由于计算机储存数据的精度有限,比较两个浮点数是否相等时,不能直接用等于,而是要考虑二者之间的差值,是否小于一个极小的值,若是,则可认为二者相等。
2.考虑到封装性,可以将计算乘方的函数单独列出来。
3.求乘方时,除了可以直接进行n次相乘,还可以考虑从递归的角度出发。鉴于有如下关系:
当n为偶数时,
当n为奇数时,图片说明
即可以将PowerWithUnsigned函数进行递归形式的修改。
当然,也可以使用动态规划代替递归的部分。

class Solution {
public:
    double Power(double base, int exponent) {
        double res = 1.0;
        unsigned int absExponent;
        if (exponent == 0)
            return 1;
        else if (sequal(base, 0.0))
            return 0;
        absExponent = (unsigned int) exponent; 
        if (exponent < 0)
            absExponent = (unsigned int)(-exponent);
        res = PowerWithUnsigned(base, absExponent);
        if (exponent < 0)
            res = 1.0/res;
        return res;
    }
    /*double PowerWithUnsigned(double base, unsigned int exponent) {
        double res = 1.0;
        while (exponent --) {
            res = res * base;
        }
        return res;
    }*/
    double PowerWithUnsigned(double base, unsigned int exponent) {
        if (exponent == 0)
            return 1;
        if (exponent == 1)
            return base;
        double res = PowerWithUnsigned(base, exponent >> 1);
        res = res * res;
        if (exponent & 1)
            res = res * base;
        return res;
    }
    bool sequal(double a1, double a2) {
        if ((a1 - a2) > -0.0000001 && (a1 - a2) < -0.0000001)
            return true;
        else
            return false;
    }
};