题目描述
给定一个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 代码
将方法一思考简化
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
方法一
# -*- 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