演算法 數值的整數次方

2021-09-26 20:01:50 字數 1781 閱讀 7401

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

注:base和exponent不同時為0。

當exponent>0時,本題的本質就是快速乘法。

當exponent<0時,bas

eexp

onen

t=1b

ase−

expo

nent

base^=}}

baseex

pone

nt=b

ase−

expo

nent

1​,只需要使用快速乘法求解bas

e−ex

pone

nt

base^

base−e

xpon

ent,然後再取其倒數,即為最終的結果。

因此,本題的最終的本質還是快速乘法。

我們以求1011

10^10

11為例,說明快速乘法的過程:

將指數11轉換為二進位制形式1011;

1 011

=101

×8×1

00×4

×101

×2×1

01×1

10^=10^\times10^\times10^\times10^

1011=1

01×8

×100

×4×1

01×2

×101

×1。

在這個過程中,我們先求出101

10^1

101,然後根據101

10^1

101求出102

10^2

102,再根據102

10^2

102求出104

10^4

104,…,最後求出108

10^8

108。因此,11的二進位制數形式總共多少位,就使用了幾次乘法。

然後把應該累乘的值相乘即可,即108

10^8

108、102

10^2

102、101

10^1

101應該累乘,因為8、2、1對應到11的二進位制數中,相應位上是1;而104

10^4

104不應該累乘,因為4對應到11的二進位制數中,相應位上是0。

**實現使用python 2.7.3。

# -*- coding:utf-8 -*-

class

solution

:def

power

(self, base, exponent)

:if base ==0:

return

0elif exponent ==0:

return

1else

: flag = exponent >

0

res =

1 exponent =

abs(exponent)

while exponent:

if exponent &1:

res *= base

base *= base

exponent >>=1

if flag:

return res

else

:return

1/res

演算法 數值的整數次方

從三方面確保 完整性 1 功能測試 測試程式能否按預期完成功能。2 邊界測試 測試一些輸入的邊界,看看程式還能不能正常執行。3 負面測試 測試一些不合法的輸入,檢驗程式的魯棒性。魯棒性實際上就是程式能很好承受使用者的各種輸入 操作也是輸入 的性質,即便要求了正確使用的輸入,也要考慮到其它錯誤的輸入,...

常見演算法 數值的整數次方

package common author zhaoliang program newcoder description 數值的整數次方 create 2020 11 21 19 52 public class power int ab ponent exponent 指數小於0時,先轉成正數計算 ...

PHP 演算法 數值的整數次方的PHP實現

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。思路 1.指數的二進位制表達10 6次方 可以表示10 110 二進位制 10 100 10 10 10 000 10 4 10 2 2.移位運算 while n 0 function po...