您的位置:首页 > 其它

第2天 数值的整数次方

2014-01-16 23:29 302 查看
题目:实现函数ondouble Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。

注意:

1. 参数base与exponent的值都有三种情况 正数、0、负数

2. double的精度问题,如果比较介意0.000001的偏差可以使用BigDecimal。

/**
*  面试题11
*
*  2014-1-16
*/
public class Power {

double power(double base, int exponent) {
if (equal(base, 0.0) || exponent <= 0) {
return 0.0;
} else if (exponent == 1) {
return base;
}

double result = getPowerValue(base, exponent >> 1);
result *= result;
if ((exponent & 0x1) == 1) {
// 奇数还需要再乘以base
result *= base;
}

// 负负得正但是负数的N次方依然是负数
if (base < 0 && result > 0) {
result = -result;
}

return result;
}

double getPowerValue(double base, int exponent) {

double result = 1.0;
for (int i = 0; i < exponent; i++) {
result *= base;
}

return result;
}

boolean equal(double num1, double num2) {
if (num1 - num2 < 0.0000001 && num1 - num2 > -0.0000001) {
return true;
}
return false;
}

public static void main(String[] args) {
Power power = new Power();

boolean flag = true;

flag &= power.equal(power.power(9, 3), 729.0);
flag &= power.equal(power.power(3, 0), 0.0);
flag &= power.equal(power.power(3, -1), 0.0);
flag &= power.equal(power.power(0, 0), 0);
flag &= power.equal(power.power(-2.1, 4), -19.4481);
flag &= power.equal(power.power(-2.1, 0), 0);
flag &= power.equal(power.power(-2.1, -3), 0);

System.out.println(flag);
}

}


参考资料:

《剑指Offer》面试题11
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: