整数的整数次方
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路
- 需要考虑指数正负,底数是否为零
- 暴力的方法是直接一个一个相乘
- 根据指数的二进制表示,如13表示为二进制
1101
- 那么
10^1101 = 10^0001*10^0100*10^1000
- 通过
&1
和>>1
来逐位读取1101
,为1时将该位代表的乘数累乘到最终结果
class Solution {
public:
double Power(double base, int exponent) {
if(base==0.0&&exponent<0) return 0.0;
if(exponent==0.0) return 1.0;
if(exponent==1.0) return base;
int abse = exponent;
if(exponent<0) abse=-abse;
double ans=1.0;
while(abse){
if(abse&1!=0){
ans *= base;
}
base *= base;
abse=abse>>1;
}
/*暴力方法
for(int i=1;i<=abse;i++){
ans*=base;
}
*/
return exponent<0?1/ans:ans;
}
};