永恒的蓝色梦想 发表于 2020-5-11 18:53:19

Python:每日一题 390

本帖最后由 永恒的蓝色梦想 于 2020-5-11 21:52 编辑

今天的题目:

实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000示例 2:

输入:x = 2.10000, n = 3
输出:9.26100示例 3:

输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25说明:


[*]-100.0 < x < 100.0
[*]n 是 32 位有符号整数,其数值范围是 [-231, 231-1] 。

{:10_298:}欢迎大家一起答题!{:10_298:}

kinkon 发表于 2020-5-11 20:14:16

本帖最后由 kinkon 于 2020-5-11 20:36 编辑

昨天才做过,凑个热闹
class Solution:
    def myPow(self, x: float, n: int) -> float:
      if x == 0.0: return 0.0
      res = 1
      if n < 0: x, n = 1 / x, -n
      while n:
            if n & 1: res *= x
            x *= x
            n >>= 1
        return res

永恒的蓝色梦想 发表于 2020-5-11 18:57:20

今天我来出题{:10_256:}
因为 zltzlt 懒 (滑稽)

qiuyouzhi 发表于 2020-5-11 19:29:09

本帖最后由 zltzlt 于 2020-5-11 19:30 编辑

永恒的蓝色梦想 发表于 2020-5-11 18:57
今天我来出题

感觉回答的人好少.....

永恒的蓝色梦想 发表于 2020-5-11 19:30:53

qiuyouzhi 发表于 2020-5-11 19:29
感觉回答的人好少.....

是的

扼婉星 发表于 2020-5-11 19:44:23

def power(x,n):
    result=1
    for unit in range(n):
      result *= x
    return result
def main():
    x=eval(input('输入x:'))
    n=eval(input('输入n:'))
    print(power(x,n))
main()

赚小钱 发表于 2020-5-11 19:48:22

本帖最后由 赚小钱 于 2020-5-11 19:49 编辑

In : def pow_pos(x, n):
    ...:   if n == 0:
    ...:         return 1;
    ...:   if n == 1:
    ...:         return x;
    ...:   return x * pow(x, n - 1);
    ...:

In : def pow_neg(x, n):
    ...:   if n == 0:
    ...:         return 1;
    ...:   if n == 1:
    ...:         return x;
    ...:   return pow(x, n + 1) / x;
    ...:

In : def pow(x, n):
    ...:   if n > 0:
    ...:         return pow_pos(x, n);
    ...:   return pow_neg(x, n);
    ...:

In : a = pow(2.1, 3)

In : a
Out: 9.261000000000001

In : a = pow(2, -2);

In : a
Out: 0.25

zltzlt 发表于 2020-5-11 19:48:32

扼婉星 发表于 2020-5-11 19:44


没有考虑 n 为负数的情况

乘号 发表于 2020-5-11 19:51:12

占+1

塔利班 发表于 2020-5-11 20:02:45

本帖最后由 塔利班 于 2020-5-11 20:05 编辑

def pow(x,n):
    def f(x,n):
      if n<0:
            return 1/f(x,-n)
      elif n==0:
            return 1
      elif n==1:
            return x
      else:
            t=f(x,n//2)
            return t*t*f(x,n&1)
    print('%.5f'%f(x,n))

永恒的蓝色梦想 发表于 2020-5-11 20:06:46

塔利班 发表于 2020-5-11 20:02


x=2.00000,n=-2147483648 时 Overflow

Twilight6 发表于 2020-5-11 20:08:47

本帖最后由 Twilight6 于 2020-5-11 21:13 编辑

久违的每日一题

def pow(x, n):
    result = 1
    while n > 0:
      n -= 1
      result *= x
    while n < 0:
      n += 1
      result /= x
    return result

永恒的蓝色梦想 发表于 2020-5-11 20:09:05

赚小钱 发表于 2020-5-11 19:48


x=1.00001,n=123456 递归次数过大

永恒的蓝色梦想 发表于 2020-5-11 20:10:20

扼婉星 发表于 2020-5-11 19:44


x=2.00000,n=-2 解答错误

赚小钱 发表于 2020-5-11 20:12:34

永恒的蓝色梦想 发表于 2020-5-11 20:09
x=1.00001,n=123456 递归次数过大

是的,我发现了。。。

永恒的蓝色梦想 发表于 2020-5-11 20:15:55

kinkon 发表于 2020-5-11 20:14
昨天才做过,凑个热闹

过了,但是你的代码没有 return res

ouyunfu 发表于 2020-5-11 20:18:29

def pow(x, n):
    return "%.5f" % x**n

永恒的蓝色梦想 发表于 2020-5-11 20:19:39

ouyunfu 发表于 2020-5-11 20:18


作弊!

liuzhengyuan 发表于 2020-5-11 20:28:42

快速幂我不会{:10_266:}
{:9_220:}

ouyunfu 发表于 2020-5-11 20:31:33

永恒的蓝色梦想 发表于 2020-5-11 20:19
作弊!

难道不能用**
页: [1] 2 3
查看完整版本: Python:每日一题 390