/**
* 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
*/
注意 这里所说的exponent 可不单单是指正整数,还指负整数。
这里蹩脚的算法,网上还有其他的算法简单一点的,我也附上。
package Chap2;
/**
* 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
*/
public class NumberOf1 {
public static double Power(double base, int exponent) {
if(base==0) {
return 0;
}
double result=1.0;
int positiveExponent=Math.abs(exponent);
while(positiveExponent!=0) {
result*=base;
positiveExponent--;
}
return exponent < 0 ? 1 /result:result;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
double a=Power(2,-1);
System.out.println(a);
}
}
/**
* 非递归。推荐的做法,复杂度O(lg n)
*/
public double power(double base, int exponent) {
if (base == 0) {
return 0;
}
double result = 1.0;
int positiveExponent = Math.abs(exponent);
while (positiveExponent != 0) {
// positiveExponent & 1这句是判断奇数的
if ((positiveExponent & 1) == 1) {
result *= base;
}
base *= base;
// 右移1位等于除以2
positiveExponent = positiveExponent >> 1;
}
return exponent < 0 ? 1 / result : result;
}
public double power_1(double base, int exponent) {
if (base == 0) {
return 0;
}
int positiveExponent = Math.abs(exponent);
double result = powerUnsigned(base, positiveExponent);
return exponent < 0 ? 1 / result : result;
}