题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
下面来看代码:
public class PowerSolution {
public static double Power(double base, int exponent) {
//当底数为0,指数小于0,则为非法情况。
if (equal(base,0.0)&&exponent<0) {
return 0.0f;
}
//当指数小于0的时候即求该数的倒数再乘方
if (exponent<0) {
int absExponent = -exponent;
double result = PowerWithNonNegative(base, absExponent);
result = 1.0/result;
return result;
}else {
return PowerWithNonNegative(base, exponent);
}
}
//自定义方法来判断两个double的数是不是相等,因为有误差所以在范围内都认为相等
public static boolean equal(double a, double b){
if (((a-b)>-0.00000001)&&((a-b)<0.00000001)) {
return true;
}else {
return false;
}
}
public static double PowerWithNonNegative(double base, int exponent){
if(exponent==0){
return 1;
}
if(exponent==1){
return base;
}
double result = PowerWithNonNegative(base,exponent>>1);
result*=result;
//如果是奇数次方的情况,最终除2余1要与base相乘
if((exponent&0x1)==1){
result *=base;
}
return result;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/as02446418/article/details/47978411