如何让古埃及乘法程序支持负数运算?
修复古埃及乘法程序的负数处理问题
你的程序在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
相关产品推荐
相关产品推荐

