题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。
思路:求次方,需要考虑四种情况。
- 底数为0,指数为负,无意义(采用全局变量);
- 指数为0,返回1;
- 指数为负,返回Power(1/base, exponent);
- 指数为正,正常情况。
注意:
- 该题目说明“不考虑大数情况”。
- 计算机在判断相等时,存在误差问题。
public double Power(double base, int exponent) {
boolean flag = false;
double res = 0.0;
if (equal(base, 0.0) && exponent<0) {
flag = true; // 无意义
return 0.0;
}
if (equal(exponent, 0.0)) {
return 1.0;
}
if (exponent < 0) {
res = PowerWithUnsignedExponent(1.0/base, -exponent);
} else {
res = PowerWithUnsignedExponent(base, exponent);
}
return res;
}
public double PowerWithUnsignedExponent(double base, int exponent) {
double res = 1.0;
for (int i=1; i<=exponent; ++i) {
res *= base;
}
return res;
}
// 判断两个double是否相等,计算机有误差
public boolean equal(double num1, double num2) {
if ((num1-num2)<0.0000001 && (num1-num2)>-0.0000001)
return true;
else
return false;
}