劍指offer16 數值的整數次方

2021-10-04 22:49:24 字數 1789 閱讀 6485

思路方法一:暴力法

方法二:利用指數法則遞迴計算(分奇數和偶數)

方法三: 將n表示為二進位制來做

package jzoffer;

/** * @auther: wwh

* @date: 2020-04-12 15:48

* @description:

*/public

class

mypow

double ans =1;

for(

int i =

0; i < n; i++

)return ans;}/*

** @date: 2020-04-12 16:12

* @param: * @param null:

* @return: * @return: null

* @author: wwh

* @description: 快速冪

* 最小值:integer.min_value= -2147483648 (-2的31次方)

最大值:integer.max_value= 2147483647 (2的31次方-1)

這裡需要使用long型別,因為如果傳入的n = -2147483648; 那麼轉成正數就丟失,所以要使用long

*/public

double

fastpow

(double x,

long n)

double half =

fastpow

(x,n/2)

;if(n%2==0

)else

}public

double

mypow2

(double x,

int n)

return

fastpow

(x, n);}

/** *

* @date: 2020-04-12 22:28

* @param: * @param x:

* @param n:

* @return: * @return: double

* @author: wwh

* @description: 非遞迴實現

*/public

double

mypow3

(double x,

int n)

double ans =1;

double current_product = x;

for(

long i = n; i >

0; i >>=1)

current_product = current_product * current_product;

}return ans;

}/**

* * @date: 2020-04-12 23:58

* @param: * @param null:

* @return: * @return: null

* @author: wwh

* @description:

*/public

class

solution

double res =1;

while

(n >0)

x *= x;

n /=2;

}return res;}}

public

static

void

main

(string[

] args)

}

劍指Offer 16 數值的整數次方

實現函式double power double base,int exponent 求base的exponent次方,不得使用庫函式。同時不需要考慮大數問題。看到乘方,自然想到二分加速的方法。但是這個題關注的不是速度,而是考慮問題的全面性。比如幾個邊界情況,base 0,exp 0 的時候。時間複雜...

劍指offer16 數值的整數次方

題目 實現函式double power double base,int exponent 求base的exponent次方,不得使用庫函式,同時不需要考慮大數問題。一 第一種方法大體分為以下四種情況 1 底數為0,則返回0 2 底數不為0,若指數為0,則返回1 3 底數不為0,若指數為正數,呼叫po...

劍指offer 16 數值的整數次方

保證base和exponent不同時為0 分析 注意考慮特殊情況,當底數為0,如果指數是正整數,則可以返回1,如果底數為0,指數是負整數,那麼就會出錯,而且如果底數不是0,指數是負整數,則返回的應該是底數和正整數運算結果的倒數。因此要考慮齊全。double powerwithunsignedexpo...