一、题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
二、方法一代码分析
public class Solution {
public double Power(double base, int exponent) {
int flag = 0;
if( exponent < 0 )
{
//如果是幂数是负数,设置标志位为1,并将负数取绝对值
flag = 1;
exponent *= -1;
}
//如果是0次幂的话,返回1
if(exponent == 0) return 1;
double result = 1;
//如果是幂数是正数,循环乘以底数
for(int i = 0;i < exponent;i++ ){
result *= base;
}
//判断负数的标志位,负数则要去倒数
if( flag > 0 ) return 1/result;
//正数则直接输出
return result;
}
}
运行结果:
二、方法二分析
n为偶数时:a ^ n=a ^ n / 2 * a ^ n / 2;
n为奇数,a ^ n=(a ^(n-1)/ 2)* (a ^(n-1 / 2))* a
所以对乘法处进行优化,如果是32次方,等于16次方*16次方
public class Solution {
public double Power(double base, int exponent){
int n=Math.abs(exponent); //将指数取绝对值
if(n==0)
return 1;
if(n==1)
return base;
double result=Power(base,n>>1);
result*=result;
if((n&1)==1)
result*=base;
if(exponent<0)
result=1/result;
return result;
}
}
运行结果: