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

LMC中实现总和除以输入数量取商(忽略余数)的技术求助

LMC代码整合:实现总和除以数量取商(忽略余数)

需求:

  • 计算输入数字的总和,除以输入数字的个数,结果取商(忽略余数)
  • 示例:
    • 总和10、输入2个数字 → 结果5
    • 总和14、输入3个数字 → 结果4
    • 总和16、输入3个数字 → 结果5

问题:不清楚如何将上述除法逻辑整合到现有代码中,避免冲突。现有代码如下:

START   INP 
        BRZ SLUTT 
        ADD sum 
        STA sum 
        LDA antall 
        ADD en 
        STA antall 
        BRP START 
SLUTT   LDA sum 
        OUT 
        LDA linjeskift 
        OTC 
        OTC
        OTC
        LDA n 
        OTC 
        LDA likhetstegn 
        OTC 
        LDA antall 
        OUT 
        LDA linjeskift 
        OTC 
        OTC
        OTC
        LDA d 
        OTC 
        LDA likhetstegn 
        OTC 
start   LDA sum 
        BRZ slutt
        SUB antall 
        STA sum 
        LDA resultat 
        ADD en 
        STA resultat 
        BRP start
slutt   LDA resultat 
        OUT 
        HLT 
sum     DAT 
resultat DAT 0 
antall  DAT 0 
en      DAT 1 
a       DAT 97 
d       DAT 100 
n       DAT 110 
linjeskift DAT 13 
likhetstegn DAT 61 

现有代码的冲突点分析

  1. 标签重复:LMC对标签大小写不敏感,START和start、SLUTT和slutt会被识别为同一个标签,导致跳转逻辑混乱。
  2. 变量被覆盖:除法逻辑直接修改了已经输出的sum变量,破坏了原始总和数据。
  3. 边界情况未处理:如果用户直接输入0(没有输入任何有效数字),antall为0,除法会陷入无限循环。

修改后的代码(整合除法逻辑且无冲突)

START   INP 
        BRZ CALC_DIV  ; 输入0时进入计算分支
        ADD sum 
        STA sum 
        LDA antall 
        ADD en 
        STA antall 
        BRP START 

CALC_DIV               ; 重命名标签避免冲突
        ; 输出总和
        LDA sum 
        OUT 
        ; 输出换行和"n="
        LDA linjeskift 
        OTC 
        OTC
        OTC
        LDA n 
        OTC 
        LDA likhetstegn 
        OTC 
        ; 输出数量
        LDA antall 
        OUT 
        ; 输出换行和"d="
        LDA linjeskift 
        OTC 
        OTC
        OTC
        LDA d 
        OTC 
        LDA likhetstegn 
        OTC 

        ; 处理数量为0的情况(避免除以0)
        LDA antall
        BRZ DIV_END    ; 数量为0时直接结束除法计算

        ; 复制sum到临时变量,避免修改原始sum
        LDA sum
        STA temp_sum

DIV_LOOP               ; 重命名除法循环标签
        LDA temp_sum 
        BRZ DIV_END
        SUB antall 
        BRN DIV_END    ; 不够减时停止循环
        STA temp_sum 
        LDA resultat 
        ADD en 
        STA resultat 
        BRP DIV_LOOP

DIV_END
        LDA resultat 
        OUT 
        HLT 

sum     DAT 
temp_sum DAT 0         ; 新增临时变量保存总和副本
resultat DAT 0 
antall  DAT 0 
en      DAT 1 
a       DAT 97 
d       DAT 100 
n       DAT 110 
linjeskift DAT 13 
likhetstegn DAT 61 

修改说明

  1. 标签重命名:将重复的start/slutt改为DIV_LOOP/DIV_END,SLUTT改为CALC_DIV,避免标签冲突。
  2. 新增临时变量:用temp_sum保存原始总和,除法操作只修改临时变量,保留sum的原始值。
  3. 边界处理:增加antall为0的判断,直接跳过除法计算,避免错误。
  4. 优化除法逻辑:当temp_sum减去antall后结果为负时,直接终止循环,确保取商正确(忽略余数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:50:27