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

Little Man Computer程序罗马数字转十进制出错求助

你的Little Man Computer程序的错误分析与修正

你的代码存在几个关键错误,导致无法输出正确结果,下面逐一说明并给出修正方案:

1. 核心逻辑错误:未实现系数乘法

你处理每个输入系数时,不管输入的系数是多少,都只加了一次对应数值(比如输入D=2,代码也只加一次500),但实际需求是系数 × 对应数值(比如D=2要加500×2=1000)。LMC没有乘法指令,必须用循环累加的方式实现这个逻辑。

2. 完全错误的超限判断

代码里LDA I后执行BRP EXCEEDS_LIMIT的逻辑完全偏离需求:LMC的BRP是当累加器值≥0时跳转,这意味着只要I不是负数,就会直接输出999,和“总和超过999才输出999”的要求完全不符。正确做法是计算完总和后,判断结果是否大于等于999,再决定输出内容。

3. 分支逻辑混乱

后续处理C、L等系数时,代码先加载系数再加上对应数值,得到的是「系数+数值」而非「系数×数值」,逻辑完全混乱,根本无法正确累加。


修正后的完整代码

| Input section
IN       | 读取500的系数D
STO D
IN       | 读取100的系数C
STO C
IN       | 读取50的系数L
STO L
IN       | 读取10的系数X
STO X
IN       | 读取5的系数V
STO V
IN       | 读取1的系数I
STO I

| 初始化结果为0
LDA ZERO
STO RESULT

| 处理D: 累加D*500
LDA D
STO COUNT
D_LOOP:
BRZ SKIP_D
LDA RESULT
ADD FIVEHUNDRED
STO RESULT
LDA COUNT
SUB ONE
STO COUNT
BRA D_LOOP
SKIP_D:

| 处理C: 累加C*100
LDA C
STO COUNT
C_LOOP:
BRZ SKIP_C
LDA RESULT
ADD HUNDRED
STO RESULT
LDA COUNT
SUB ONE
STO COUNT
BRA C_LOOP
SKIP_C:

| 处理L: 累加L*50
LDA L
STO COUNT
L_LOOP:
BRZ SKIP_L
LDA RESULT
ADD FIFTY
STO RESULT
LDA COUNT
SUB ONE
STO COUNT
BRA L_LOOP
SKIP_L:

| 处理X: 累加X*10
LDA X
STO COUNT
X_LOOP:
BRZ SKIP_X
LDA RESULT
ADD TEN
STO RESULT
LDA COUNT
SUB ONE
STO COUNT
BRA X_LOOP
SKIP_X:

| 处理V: 累加V*5
LDA V
STO COUNT
V_LOOP:
BRZ SKIP_V
LDA RESULT
ADD FIVE
STO RESULT
LDA COUNT
SUB ONE
STO COUNT
BRA V_LOOP
SKIP_V:

| 处理I: 累加I*1
LDA I
STO COUNT
I_LOOP:
BRZ SKIP_I
LDA RESULT
ADD ONE
STO RESULT
LDA COUNT
SUB ONE
STO COUNT
BRA I_LOOP
SKIP_I:

| 判断是否超过999
LDA RESULT
SUB LIMIT
BRP EXCEEDS_LIMIT

| 输出结果
LDA RESULT
OUT
HLT

| 超限输出
EXCEEDS_LIMIT:
LDA LIMIT
OUT
HLT

| 数据段
D: DAT 000
C: DAT 000
L: DAT 000
X: DAT 000
V: DAT 000
I: DAT 000
RESULT: DAT 000
COUNT: DAT 000
FIVEHUNDRED: DAT 500
HUNDRED: DAT 100
FIFTY: DAT 050
TEN: DAT 010
FIVE: DAT 005
ONE: DAT 001
ZERO: DAT 000
LIMIT: DAT 999

修正说明

  • 每个系数都通过循环累加实现乘法:把系数存入COUNT,每次循环给RESULT加对应数值,COUNT减1,直到COUNT为0时跳出循环,实现「系数×数值」的效果。
  • 修正了超限判断:计算完总和后,用RESULT减去999,若结果≥0(即总和≥999),则输出999,否则输出计算结果。
  • 统一初始化RESULT为0,避免分支逻辑导致的未初始化问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:04:54