package jianzhioffer;
import java.util.Scanner;
/**
* 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
*
*/
public class Solution11 {
public static double Power1(double base, int exponent) {
return Math.pow(base, exponent);
}
public static double Power2(double base, int exponent) { //累乘,复杂度为O(n)
double result = 1.0;
for(int i = 0;i < Math.abs(exponent);i++){
result *= base;
}
if(exponent<0)
result = 1/result;
return result;
}
public static double Power3(double base, int exponent) { //递归,复杂度为O(logn)
//n为偶数,a^n=a^n/2*a^n/2;n为奇数,a^n=(a^(n-1)/2)*(a^(n-1/2))*a
int n = Math.abs(exponent);
if(n ==0)
return 1;
if(n == 1)
return base;
double result = Power3(base,n>>1); //右移一位,除以2
result*= result;
if((n&1) == 1) //判断是否为奇数
result *= base;
if(exponent<0)
result = 1/result;
return result;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double base = sc.nextDouble();
int exponent = sc.nextInt();
System.out.println(Power1(base,exponent));
System.out.println(Power2(base,exponent));
System.out.println(Power3(base,exponent));
}
}
剑指offer题11
最新推荐文章于 2018-10-18 15:37:02 发布