1. 程式人生 > >劍指offer-12:數值的整數次方

劍指offer-12:數值的整數次方

題目描述

給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。

思路

個人覺得此題考查的是快速冪演算法。

快速冪演算法

快速冪 , 矩陣快速冪 在算大指數次方時是很高效的,他的基本原理是二進位制。

大家首先要認識到這一點:任何一個整數N,都能用二進位制來表示。。
那麼對於an , n一定可以用二進位制表示,比如a11

在這裡插入圖片描述

    double fun( double a, int b )
    {
        double r = 1;
        double base = a;
        while
( b != 0 ) { if((b&1)==1)//判斷奇偶性,為1時才進行運算 { r *= base; } base *= base; b=b>>1; } return r; }

此題程式碼

public class Solution12 {


    public double Power(double base, int exponent) {
        double
res = 1, curr = base; int n; if (exponent > 0) { n = exponent; } else if (exponent < 0) { if (base == 0) throw new RuntimeException("分母不能為0"); n = -exponent; } else {// exponent==0 return 1;// 0的0次方 }
while (n != 0) {//快速冪演算法 if ((n & 1) == 1){ res *= curr; } curr *= curr;// 翻倍 n >>= 1;// 右移一位 } return exponent >= 0 ? res : (1 / res); } public static void main(String[] args) { Solution12 solu = new Solution12(); System.out.println(String.valueOf(solu.fun(3, 4))); } }