剑指offer题11

来源:互联网 发布:linux进程组 编辑:程序博客网 时间:2024/06/01 13:03
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));}}

原创粉丝点击