题目:
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同事不需要考虑最大数问题。
思路:
本题的关键在于考虑问题要全面。由于要考虑整数次方,就要考虑指数为负,为0,为正的情况,同时结合base是否为0的情况。
当指数为负,底数(base)为0时,就会出现对0做除法,报错。最后,对算法再进行优化,减少乘法次数。
public class Solution {
public double Power(double base,int exponent){
double res = 1;
if (base==0&&exponent<0) System.out.println("输入错误");
if (base==0) return 0;
if (exponent==0) return 1;
if (exponent<0){
int absexponent = -exponent;
double tmp = Power(base,absexponent);
res = 1.0/tmp;
}
if (exponent>=2) {
if (exponent%2==0) {
res = Power(base, exponent/2);
res = res*res;
}
if (exponent%2==1)
{
double tmp = Power(base,(exponent-1)/2);
res = tmp*tmp*base;
}
}
if (exponent==1){
res = res*base;
}
return res;
}
}