You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeWars大数幂最后一位问题:Python代码特定测试用例失败排查

解决《Last digit of a large number》超大数测试用例错误问题

核心问题排查

你用幂最后一位的周期特性思路是对的,但出错大概率是没考虑尾数周期的差异性,或是超大指数的模运算逻辑错误,以下是具体分析:

1. 尾数周期并非全为4

不同数字的幂最后一位周期不一样,不能统一按4处理:

  • 尾数0、1、5、6:幂的最后一位永远是自身,周期为1
  • 尾数4、9:周期是2(比如41=4,42=6,4^3=4,循环)
  • 只有尾数2、3、7、8的周期是4

2. 超大指数的模运算误区

当处理极大数b时,计算周期对应的指数时要注意:

  • 若周期为4,当b % 4 == 0时,不能直接取0次幂(结果为1),而要取4次幂的结果(比如34最后一位是1,38也是1,对应周期的最后一个值)
  • 若直接用b % 4的结果作为指数,会导致模4为0时的错误。

3. 特殊情况遗漏

题目明确0^0视为1,必须单独判断b=0的情况,无论a是什么,直接返回1。

针对你的测试用例验证

你的测试用例:

  • a的最后一位是3
  • b的最后两位是651,651%4=3,所以对应3^3的最后一位,结果是7

如果你的代码没处理周期差异,或是模4为0的情况,就会返回错误值。

修正后的代码

def last_digit(a, b):
    if b == 0:
        return 1
    # 取a的最后一位
    last_a = int(str(a)[-1]) if a != 0 else 0
    
    # 周期1的情况
    if last_a in {0, 1, 5, 6}:
        return last_a
    # 周期2的情况
    elif last_a in {4, 9}:
        exp = b % 2
        return last_a ** (2 if exp == 0 else exp) % 10
    # 周期4的情况
    else:
        exp = b % 4
        return last_a ** (4 if exp == 0 else exp) % 10

这个代码能正确处理你给出的超大数测试用例,返回结果7。

内容的提问来源于stack exchange,提问作者singleslit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:36:24