题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
class Solution {
public:
double Power(double base, int exponent) {
//剑指offer上的解答
//内存超限:您的程序使用了超过限制的内存
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
//用右移代替除以2
double result = Power(base, exponent >> 1);
result *= result;
//用位与运算代替求余运算
if(exponent & 0x1 == 1)
result *= base;
return result;
}
};
double Power(double base, int exponent) {
double res = 1,curr = base;
if(exponent>0){
exponent = n;
}else if(n<0){
if(base==0)
throw new RuntimeException("分母不能为0");
exponent = -n;
}else{// n==0
return 1;// 0的0次方
}
while(exponent!=0){
if((exponent&1)==1)
res*=curr;
curr*=curr;// 翻倍
exponent>>=1;// 右移一位
}
return n>=0?res:(1/res);
}
//简单粗暴的累乘
double Power(double base, int exponent) {
double res = 1.0;
if (base == 0)
return 0;
if (exponent == 0)
return 1;
if (exponent < 0)
base = 1.0 / base;
while (exponent){
res *= base;
exponent = (exponent>0) ? (--exponent) : (++exponent);
}
return res;
}
public class Solution {
public double Power(double base, int exponent) {
//java解法
if(exponent==0 && base != 0)
return 1;
if(exponent==1)
return base;
if(base == 0 && exponent <= 0){
throw new RuntimeException();
}
if(base ==0 && exponent>0){
return 0;
}
int n= exponent;
if(exponent<0){
n = -exponent;
}
double result=Power(base,n>>1);
result*=result;
if((n&1)==1)
result*=base;
if(exponent<0)
result=1/result;
return result;
}
}