鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖

[已解决]Python:每日一题 390

[复制链接]
回帖奖励 8 鱼币 回复本帖可获得 1 鱼币奖励! 每人限 1 次(中奖概率 40%)
发表于 2020-5-11 23:08:10 | 显示全部楼层
1.暴力求解,肯定超时,但是可以根据暴力求解优化
def myPow_0(x: float, n: int)-> float:
    ans = 1.0
    if n == 0:
        return ans
    for i in range(1, abs(n) + 1):
        ans *= x
    return ans if n > 0 else 1.0 / ans  # 处理n为负数的方法
2.进行优化,不要乘n次,而是每次乘平方,对n的基偶进行判断,奇数要额外乘一个x(用递归特别容易理解)
def myPow_1(x: float, n: int)-> float:
    def helper(N: int):
        if N == 0:
            return 1.0
        y = helper(N // 2)
        return y * y * x if N % 2 else y * y

    return helper(n) if n >= 0 else 1.0 / helper(-n)
3.想到一个以前做过的题,用1,2,4,8,16,32,64,128的加法组合表示1-255的数(二进制)
和这题比较像,转化为n用这些数表示,然后幂相加就是数相乘
def myPow_2(x: float, n: int) -> float:
    if n == 0:
        return 1.0
    N, ans = abs(n), 1.0
    x_order = ans * x
    while N:
        if N % 2:
            ans *= x_order
        x_order *= x_order
        N //= 2
    return ans if n > 0 else 1.0 / ans
4.理解了之后,就可以用位运算符中的右移运算符
def myPow_3(x: float, n: int) -> float:
    N, ans = abs(n), 1.0
    while N:
        if N & 1:
            ans *= x
        x *= x
        N >>= 1
    return ans if n >= 0 else 1.0 / ans

我还是最喜欢3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 07:46:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 10:07:48 | 显示全部楼层
hui~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-12 14:33:35 From FishC Mobile | 显示全部楼层

回帖奖励 +1 鱼币

永恒的蓝色梦想 发表于 2020-5-11 22:46
没有标准答案

……感觉你以后出题会偏向于重构轮子,
但我不太喜欢,因为
人家已经发明好轮子了,你直接用就可以
平常练习一下就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-12 14:39:16 | 显示全部楼层
_2_ 发表于 2020-5-12 14:33
……感觉你以后出题会偏向于重构轮子,
但我不太喜欢,因为
人家已经发明好轮子了,你直接用就可以{:10 ...
……感觉你以后出题会偏向于重构轮子,
并不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 15:13:26 | 显示全部楼层

回帖奖励 +1 鱼币

出题风格变了,之前的题貌似还没有结清吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-12 15:25:51 | 显示全部楼层
TJBEST 发表于 2020-5-12 15:13
出题风格变了,之前的题貌似还没有结清吧

都是力扣上的题,不过既然出题人不一样,风格也会变的吧

那你得问zltzlt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 15:34:05 | 显示全部楼层
先占个楼,一会再写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 15:57:43 From FishC Mobile | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-12 15:25
都是力扣上的题,不过既然出题人不一样,风格也会变的吧

那你得问zltzlt

尝试自己出题
轮子还是可以考虑的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-12 21:23:23 | 显示全部楼层

回帖奖励 +1 鱼币

def func390(x, n):
    if n < 0:
        return 1/func390(x, -n)
    elif n == 0:
        return 1
    elif n % 2 == 0:
        return func390(x, n//2)*func390(x, n//2)
    else:
        return x*func390(x, n-1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 21:30:07 | 显示全部楼层

回帖奖励 +1 鱼币

def power(x,n):
    p = 1
    if n < 0:
        for i in range(-n):
            p *= x
        return 1/p
    if n == 0:
        return 1
    if n > 0:
        for i in range(n):
            p *= x
        return p
    
x,n = map(int,input().split())
print(power(x,n))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-30 10:49:27 | 显示全部楼层

评分

参与人数 1荣誉 -2 鱼币 -2 收起 理由
qiuyouzhi -2 -2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-30 16:08:25 | 显示全部楼层
请求使用模块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-30 17:02:32 | 显示全部楼层

禁止,我甚至连 pow 函数和 __pow__ 方法都不让你用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-31 06:24:49 | 显示全部楼层
鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 11:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表