题解 | 数值的整数次方
数值的整数次方
https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00
class Solution {
public:
double Power(double base, int exponent) {
if (base == 0) return 0;
if (exponent == 0) return 1;
double ans = 1;
bool zbase = true, ze = true;
if (base < 0) {
zbase = false;
base = 0 - base;
}
if (exponent < 0) {
ze = false;
exponent = 0 - exponent;
}
while (exponent) {
if (exponent % 2 == 1)// exponent&1
ans *= base;
base *= base;
exponent /= 2;//exponent>>1;仅用于2的正整数次幂的整除
}
if(!zbase) ans = 0 - ans;
if(!ze) ans = 1.0/ans;
return ans;
}
};
很显然快速幂,需要注意处理负数的情形和为0的情形,可以考虑位运算处理取余和整除问题(已注释出)。
最近复习了位运算,位运算的效率比乘除法及求余运算的效率要高很多,修改exponent部分的处理为如下:
while (exponent) {
if (exponent&1)// exponent&1
ans *= base;
base *= base;
exponent >>= 1;//exponent>>1;仅用于2的正整数次幂的整除
}
