您的位置:首页 > 职场人生

面试题 11:数值的整数次方

2017-06-27 15:33 344 查看
一. 题目

实现函数double Power(double base,int exponent),求base 的exponent 次方.不得使用库函数,同时不需要考虑大数问题.

代码请到我的代码库中下载 Point2Offer

二. 代码

package ween_2;

/**难度系数:***
* 剑指offer: 数值的整数次方
* 方法:考虑指数为负和底数为0
* 测试用例:功能测试(指数为正,指数为负,指数为0)
* 特殊输入测试(底数为0)
* @author dingding
* Date:2017-6-22 17:00
* Declaration: All Rights Reserved!
*/
public class No11 {
private static boolean invalidInput = false;
public static void main(String[] args) {
test1();
test2();
test3();
test4();
}

//计算
private static double power(double base,int exponent){
invalidInput = false;
if (equal(base,0.0) && exponent<0) {
invalidInput = true;
return 0.0;
}
int absExponent = exponent;
if (exponent<0) {
absExponent = -exponent;
}
double result = powerWithAbsExponent(base,absExponent);
if (exponent<0) {
result = 1.0/result;
}
return result;
}

//计算次方(使用递归方法,效率更高)
private static double powerWithAbsExponent(double base, int absExponent) {
if (absExponent==0) {
return 1;
}
if (absExponent==1) {
return base;
}

double result = powerWithAbsExponent(base, absExponent>>1);
result *=result;
if ((absExponent&1) == 1) {
result*=base;
}
//      for (int i=1;i<=absExponent;i++){
//          result*=base;
//      }
return result;
}

//判断是否等于0
private static boolean equal(double a, double b) {
if ((a-b>-0.0000001)&&(a-b<0.0000001)) {
return true;
}else {
return false;
}
}

private static void test1() {
double result = power(2, 4);
System.out.println(result);
}

private static void test2() {
double result = power(2, -3);
System.out.println(result);

}

private static void test3() {
double result = power(0, -1);
System.out.println(result);

}

private static void test4() {
double result = power(-2, 4);
System.out.println(result);
}

}


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