您的位置:首页 > Web前端

JAVA实现数值的整数次方(《剑指offer》)

2017-04-25 20:53 417 查看
题目:

给定一浮点数base和int类型的整数exponent。求base的exponent次方

牛客网题目截图:



解答:

[java] view
plain copy

public class Solution {

public double Power(double base, int exponent) {

// 当底数为0,指数为负数时,则抛出异常或者返回0.0

if (equal(base, 0) && exponent < 0) {

return 0.0;

}

// 先对指数进行取绝对值计算

int absExponent = Math.abs(exponent);

double result = powerWithExponent(base, absExponent);

// 判断如果传入的指数是负数,进行取反,否则直接返回

if (exponent < 0) {

result = 1.0 / result;

}

return result;

}

// 计算数值的整数次方

public double powerWithExponent(double base, int absExponent) {

double result = 1.0;

for (int i = 1; i <= absExponent; ++i) {

result *= base;

}

return result;

}

// 判断两个double类型的数值是否相等

public boolean equal(double num1, double num2) {

if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001)) {

return true;

} else

return false;

}

}

牛客网编译通过截图:



另附c++解答:

[cpp] view
plain copy

/**

* 1.全面考察指数的正负、底数是否为零等情况。

* 2.写出指数的二进制表达,例如13表达为二进制1101。

* 3.举例:10^1101 = 10^0001*10^0100*10^1000。

* 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。

*/

public double Power(double base, int n) {

double res = 1,curr = base;

int exponent;

if(n>0){

exponent = n;

}else if(n<0){

if(base==0)

throw new RuntimeException("分母不能为0");

exponent = -n;

}else{// n==0

return 1;// 0的0次方

}

while(exponent!=0){

if((exponent&1)==1)

res*=curr;

curr*=curr;// 翻倍

exponent>>=1;// 右移一位

}

return n>=0?res:(1/res);

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