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

如何让古埃及乘法程序支持负数运算?

修复古埃及乘法程序的负数处理问题

你的程序在b为负数时陷入无限循环,核心原因是Python的整数除法//对负数采用向下取整规则——比如-1 // 2结果是-1而非0,导致b永远无法减到0,循环无法终止。

修改方案

解决思路是先记录两个数的乘积符号,把b转为正数执行古埃及乘法逻辑,最后再把符号应用到结果上。既保留古埃及乘法的核心逻辑,又避免负数除法的问题:

repeat = "y"
while repeat == "y":
    # 获取用户输入的两个整数
    a = int(input("Enter the first integer: "))
    b = int(input("Enter the second integer: "))
    answer = 0

    # 记录乘积的符号:同号为正,异号为负
    sign = 1
    if (a < 0) != (b < 0):
        sign = -1

    # 将a和b转为绝对值,用正数执行乘法逻辑
    abs_a = abs(a)
    abs_b = abs(b)

    print("A", "B")
    print("---")
    print(abs_a, abs_b)

    # 古埃及乘法核心循环,处理正数情况
    while abs_b != 0:
        if abs_b % 2 != 0:
            answer += abs_a
            next_a = abs_a * 2
            next_b = abs_b // 2
            print(next_a, next_b)
            abs_a = next_a
            abs_b = next_b
        else:
            next_a = abs_a * 2
            next_b = abs_b // 2
            print(next_a, next_b)
            abs_a = next_a
            abs_b = next_b

    # 应用符号得到最终结果
    answer *= sign
    print(f"The product is {answer}.")
    repeat = input("Would you like to repeat? (y/n)")
print("Goodbye!")

修改关键点

  • 符号预判:通过判断两个数是否同号,提前确定乘积的正负,最后再将符号乘到结果上
  • 绝对值转换:把a和b转为正数后,abs_b // 2会正常向0取整,循环能顺利终止
  • 保留原输出逻辑:打印的A、B值仍使用绝对值后的正数,符合古埃及乘法的展示习惯,不影响结果正确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:35:18