题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路:
这道题我想到了两种方法,第一种方法当然是我之前一直首先想到的第一个方法, 就是使用java提供的java的API
进行运算;
return Math.pow(base, exponent);
但是这种方法肯定没有表达出这个题目需要给我们传授的含义。
第二种方法则利用指数的二进制进行右移来实现,因为一个正整数右移一位就相当于除2,每次将这个指数进行右移
然后分母平方。直到最后右移使得这个exponent为0;
实现:
public double Power(double base, int exponent) {
int n;
double denominator = 1;
double currentDeno = base;
if(exponent > 0){
n = exponent;
}else if(exponent < 0){
n = -exponent;
}else{
return 1;
}
while(n != 0){
if((n & 1) == 1){
denominator *= currentDeno;
}
currentDeno *= currentDeno;
n >>= 1;
}
return exponent > 0? denominator:(1/denominator);
}