如何编写不使用*运算符的两自然数相乘函数?求更优实现方案
更符合规则的自然数乘积实现方案
你当前的代码存在两个问题:一是依赖for循环和range(),这两者不属于规则允许的仅加1、赋值、比较操作范畴;二是主函数调用时存在拼写错误(mulitplication_of_ab应为multiplication_of_ab)。
以下是完全贴合规则的实现,仅使用允许的操作:
def multiplication_of_ab(a, b): result = 0 # 外层循环:控制累加b次 counter_b = 0 while counter_b < b: # 内层循环:通过a次加1实现累加a到结果 counter_a = 0 while counter_a < a: result += 1 counter_a += 1 counter_b += 1 return result if __name__ == "__main__": print(multiplication_of_ab(3, 4)) # 输出12
进一步优化(减少循环次数)
利用乘法交换律,我们可以先比较a和b的大小,选择较小的数作为内层循环的次数,减少总循环步数,这同样符合规则:
def multiplication_of_ab(a, b): result = 0 # 交换a和b,让较小的数作为内层循环次数,提升效率 if a > b: a, b = b, a counter_b = 0 while counter_b < b: counter_a = 0 while counter_a < a: result += 1 counter_a += 1 counter_b += 1 return result if __name__ == "__main__": print(multiplication_of_ab(4, 3)) # 输出12
这两个实现完全遵循规则:所有循环用while(仅依赖比较操作控制终止),累加完全通过+1实现,没有使用任何额外语法或函数。
内容的提问来源于stack exchange,提问作者Dan Chen
相关产品推荐
相关产品推荐

