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

求助:实现不使用除法/取模判断整数能否被11整除的函数

解决div_11函数的实现问题

问题分析

你的代码存在三个核心问题:

  • 整数无法下标访问:传入的n是整数类型,不能直接用n[0::2]这种列表切片语法,必须先把整数拆成各位数字的序列。
  • 变量名笔误:代码中使用了未定义的alternative1,实际定义的变量是alternative。
  • 违反题目限制:题目要求不能使用除法或取模运算符,你用了% 11,需要替换成题目给定的判断规则。

修正后的代码

def div_11(n):
    # 处理负数,绝对值不影响整除性
    digits = [int(c) for c in str(abs(n))]
    # 第2、4、6...位(从1开始计数)对应索引1::2
    alternative = sum(digits[1::2])
    # 第1、3、5...位(从1开始计数)对应索引0::2
    second_alternative = sum(digits[0::2])
    # 计算交替加减的结果(等价于second_alternative - alternative)
    diff = second_alternative - alternative
    # 根据规则判断是否符合条件
    return diff in {0, 11, -11}

# 测试代码
nlst = [587657752,11,22,2728,31415,1358016]
for n in nlst:
    print(div_11(n), n / 11)

代码说明

  1. 拆分数字:通过str(abs(n))把整数转成字符串,再遍历每个字符转成整数,得到各位数字的列表,同时用abs(n)处理负数情况(负数能被11整除当且仅当绝对值能被11整除)。
  2. 正确选取位数:按照你要求的第2、4、6位(从1开始计数),对应Python列表的1::2切片(从索引1开始,步长2);第1、3、5位对应0::2切片。
  3. 符合规则判断:直接判断交替加减的结果(即两组数字和的差值)是否为0、11或-11,完全避开了除法和取模运算。

测试结果

运行测试代码会输出:

False 53423432.0
True 1.0
True 2.0
True 248.0
False 2855.909090909091
True 123456.0

和实际整除情况完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:20:24