数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
这个题的关键在于int类型的整数exponent可以是负数.
我的劣质解答:
class Solution {
public:
double Power(double base, int exponent) {
if(base == 0 && exponent == 0)
return 0;
if(base == 0)
return 0;
if(exponent == 0)
return 1;
double num=1.0;
if(exponent>0){
for(int i=1;i<=exponent;i++){
num *= base;
}
return num;
}
if(exponent <0){
int a = (-exponent);
for(int i=1;i<=a;i++){
num *= base;
}
return 1/num;
}
}
};
优质解答:
class
Solution {
public
:
double
Power(
double
base,
int
exponent) {
long
long
p =
abs
( (
long
long
) exponent); //abs函数负数转换为正数
double
r = 1.0;
while
(p) { //这样一转换就用一个循环代替了我的两个循环,代码简洁啊
if
(p & 1)
r *= base;
base *= base;
p >>= 1; //利用存储数为二进制右移来完美解决循环的问题 、、问题这样做和我的整数循环快吗?思考思考
}
return
( exponent > 0 ) ? r : 1/r;
}
};