您的位置:首页 > Web前端

【剑指offer】数值的整数次方-Java

2016-09-04 10:32 337 查看
实验思路:

【1】利用 斐波那契数列求解方法,迭代1/2 求解

exponment>>1 代替传统意义的除法

exponment&0x1==?判断exponment 是偶数还是奇数

【注意事项】

1 当exponment是负数的时候,转换成正数求解次方后,求解其倒数
2 判断base 小数是否为0,需要利用函数判断,不能直接与0进行比较



import java.util.Scanner;

public class Power {
public static void main(String[] args){
System.out.println("please input the base and exponent:");
Scanner input=new Scanner(System.in);
double base=input.nextDouble();
int exponent=input.nextInt();
double result=power(base,exponent);
System.out.println("the result is: "+result);

}

private static double power(double base, int exponent) {
// TODO Auto-generated method stub
if(equal(base,0.0)) {
if(exponent<0) System.out.println("invalid input");
return 0;
}
int absExponment=(exponent>=0?exponent:-exponent);
double result=powerWithUnsignerExponent(base, absExponment);
if(exponent<0)
result=1.0/result;
return result;
}

private static boolean equal(double base, double d) {
// TODO Auto-generated method stub
if((base-d>-0.00000001)&&(base-d<0.00000001))
return true;
else
return false;
}

private static double powerWithUnsignerExponent(double base, int exponent) {
// TODO Auto-generated method stub

if(exponent==0) return 1;
if(exponent==1) return base;
double result=power(base, exponent>>1);
result*=result;
if((exponent&0x1)==1)
result*=base;
return result;
}

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