【剑指offer】数值的整数次方-Java
2016-09-04 10:32
337 查看
实验思路:
【1】利用 斐波那契数列求解方法,迭代1/2 求解
exponment>>1 代替传统意义的除法
exponment&0x1==?判断exponment 是偶数还是奇数
【注意事项】
1 当exponment是负数的时候,转换成正数求解次方后,求解其倒数
2 判断base 小数是否为0,需要利用函数判断,不能直接与0进行比较
![](https://img-blog.csdn.net/20160904104310985?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
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;
}
}
【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;
}
}
相关文章推荐
- 剑指offer:数值的整数次方(java)
- 剑指offer面试题11 数值的整数次方 java实现
- 剑指offer--面试题11:数值的整数次方--Java实现
- 剑指Offer面试题11(Java版):数值的整数次方
- 剑指Offer面试题11:数值的整数次方 Java实现
- 剑指offer编程题Java实现——面试题11数值的整数次方
- 剑指Offer 面试题16:数值的整数次方 Java代码实现
- 剑指Offer面试题11(Java版):数值的整数次方
- 【剑指offer-Java版】11数值的整数次方
- 剑指Offer面试题11(Java版):数值的整数次方
- 【剑指offer】数值的整数次方
- 剑指offer面试题11之求数值的整数次方
- 剑指offer——数值的整数次方
- 剑指offer_面试题11_数值的整数次方(*)
- 剑指offer 3.3 代码的完整性1- 求数值的整数次方
- 剑指offer 数值的整数次方
- 【剑指offer】之数值的整数次方
- 剑指Offer面试题:10.数值的整数次方
- 剑指offer--数值的整数次方
- 【剑指Offer面试编程题】题目1514:数值的整数次方---九度OJ