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

LMC求和程序错误排查:输入偶数未计入求和问题

问题分析与解决方案

你的代码核心问题在于奇数/偶数的判断逻辑完全错误,导致所有正输入都被判定为奇数,偶数分支从未执行,最终求和结果错误。

错误原因详解

看你输入≤10分支的这段代码:

LDA input
STA isEven
SUB one
BRP oddNumber

这段逻辑的意思是:输入值减1后,如果结果≥0(即输入≥1),就跳转到oddNumber分支。但所有正整数输入(比如4、2这些偶数)都满足输入≥1,因此都会被错误判定为奇数,直接跳走,根本没机会执行后续的偶数判断逻辑。这就是为什么输入4时,程序没有将其加入evenSum的原因。

修正方案

需要重新实现正确的偶数判断逻辑。在LMC中没有模运算,我们可以通过循环减2的方式判断:如果一个数减2直到结果小于2,最终结果为0则是偶数,为1则是奇数。

以下是修正后的完整代码:

start
             INP
             STA input
             BRZ halt
             LDA inputCounter
             SUB ten
             BRP afterTen

// Input <= 10:仅累加偶数
             LDA input
             STA temp          // 保存输入值到临时变量,避免判断时修改原输入
check_even:
             SUB two
             BRZ evenNumber    // 减2后为0,说明是偶数
             BRP check_even    // 结果仍为正,继续减2
             // 减2后结果为负,说明是奇数,直接更新计数器回到循环
             LDA inputCounter
             ADD one
             STA inputCounter
             BRA start

evenNumber   LDA input
             ADD evenSum
             STA evenSum
             LDA inputCounter
             ADD one
             STA inputCounter
             BRA start

// Input > 10:累加前十项偶数后,累加后续奇数
afterTen     LDA input
             STA temp
check_odd:
             SUB two
             BRZ evenAfterTen  // 减2后为0,是偶数,跳过
             BRP check_odd     // 结果仍为正,继续减2
             // 减2后结果为负,说明是奇数,累加到oddSum
             LDA input
             ADD oddSum
             STA oddSum
             LDA inputCounter
             ADD one
             STA inputCounter
             BRA start

evenAfterTen LDA inputCounter
             ADD one
             STA inputCounter
             BRA start

// Display sum
halt         LDA evenSum
             ADD oddSum
             OUT
             HLT
// Variables
evenSum      DAT 0
oddSum       DAT 0
inputCounter DAT 0
input        DAT 0
temp         DAT 0  // 新增临时变量用于判断奇偶
// Constants
two          DAT 2
ten          DAT 10

修正说明

  1. 新增临时变量temp:用于在判断奇偶时保存原输入值,避免累加器修改原输入影响后续求和。
  2. 正确的奇偶判断逻辑:
    • 对于输入≤10的分支:循环减2,若最终结果为0则判定为偶数,加入evenSum;否则判定为奇数,直接跳过。
    • 对于输入>10的分支:同样循环减2,若最终结果为1(即减2后为负)则判定为奇数,加入oddSum;偶数直接跳过。
  3. 移除冗余变量:原代码中的one和isEven变量已无需使用,直接删除简化代码。

测试第一个示例输入3,3,4,0时,程序会正确将4判定为偶数并加入evenSum,最终输出4,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:25:57