題目描述
給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。保證base和exponent不同時為0。
解題思路
- 思考指數函數的定義
-
底數共有三種情形:
(i) base > 1
(ii) 0 < base < 1
(iii) base < 0 -
底數為正數 (i)、(ii)
考慮指數為正數以及負數的情形 => 使用 flag -
底數為負數 (iii)
考慮指數為正數以及負數的情形 => 使用 flag
能否被2整除,若能被2整除,則為正數,若不能整除,則為負數 => 使用 pos -
最終判定返回的數
- flag 決定是否取倒數
- pos 判定正負數
e.g. 底數為正,若 flag 為正數,則返回 ans => ans
e.g. 底數為正,若 flag 為負數,則返回 ans的倒數 => 1/ans
e.g. 底數為負,若flag為正,pos為正數,則返回 => ans
e.g. 底數為負,若flag為負,pos為正數,則返回 => 1/ans
e.g. 底數為負,若flag為正,pos為負數,則返回 => - ans
e.g. 底數為負,若flag為負,pos為負數,則返回 => - 1/ans
Python 代碼
將方法一思考簡化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | class Solution: def Power(self, base, exponent): """ 給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 保證base和exponent不同時為0 (0的0次方無意義) """ # write code here num = abs(base) ans = 1 flag = True # 判斷指數是否為正,正的話維持不變,負的話返回倒數 pos = True # 判斷底數是否為正,在指數為負的時候輔佐判斷 if exponent == 0: if base != 0: return 1 if base == 0: if exponent !=0: return 0 for i in range(abs(exponent)): ans *=num if base > 1: if exponent < 0: flag = False elif 0 < base < 1: if exponent <0: flag= False elif base <0: if exponent <0: flag = False if exponent % 2 !=0: pos = False else: pass # 最終透過 flag & pos 判斷 if flag and pos: return ans elif flag and not pos: return -ans elif not flag and pos: return 1/ans else: return -1/ans |
方法一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | # -*- coding:utf-8 -*- class Solution: def Power(self, base, exponent): """ 給定一個double類型的浮點數base和int類型的整數exponent。求base的exponent次方。 保證base和exponent不同時為0 """ # write code here # 0的0次方無意義 num = abs(base) ans = 1 if exponent == 0: if base != 0: return 1 if base == 0: if exponent !=0: return 0 else: for i in range(abs(exponent)): ans *=num if base > 1: if exponent > 0: return ans else: return 1/ans elif 0 < base < 1: if exponent >0: return ans else: return 1/ans elif -1 <base <0: print(base) if exponent >0: if exponent %2 == 0: return ans else: return -ans else: if exponent %2 == 0: return 1/ans else: return -1/ans elif base<= -1: if exponent >0: if exponent %2 == 0: return ans else: return -ans else: if exponent %2 == 0: return 1/ans else: return -1/ans else: pass |