class Solution { public: double myPow(double x, int n) { if(0==n)return 1; if(n<0) { x=1/x; if(INT_MIN==n) return x*myPow(x,INT_MAX); else n=-n; } return n%2?myPow(x,n-1)*x:myPow(x*x,n/2); } };
本题注意点
- 负数处理, 如果计算负数次方, 需要把数据做倒数处理
- 任何数0次方都是1
- 题目设置了32位整数边界条件, discussion里面第一名答案是错的,但是评论里面有人给出了修复版本, 如果是INT_MIN的话, 需要变为INT_MAX + 1 的处理方式, 非常厉害
- 实际计算幂时候,注意利用倍数关系做加速, 类似二分查找, 不然一个个的乘法太慢了