PC/UVa:110106/10033
题目没由什么困难的,按照说明模拟就好了,有几个需要注意的问题:
- 8和9的命令是寄存器间址
- 每个输出结果后边都只有一个空行,这表示最后一个输出结果后边也只有一个空行
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
void Interpreter()
{
int regs[10] = { 0 }, memory[1000] = { 0 }, idx = 0;
string strMem;
while (getline(cin, strMem)){
if (strMem.empty()) break;
memory[idx++] = stol(strMem);
}
int PC = 0, l, m, r, cnt = 0;
bool halt = false;
while (1){
l = memory[PC] / 100;
m = (memory[PC] - l * 100) / 10;
r = memory[PC] % 10;
PC++;
switch (l)
{
case 0:
if (regs[r] != 0) PC = regs[m];
break;
case 1:
if (m == 0 && r == 0) halt = true;
break;
case 2:
regs[m] = r;
break;
case 3:
regs[m] += r;
regs[m] %= 1000;
break;
case 4:
regs[m] *= r;
regs[m] %= 1000;
break;
case 5:
regs[m] = regs[r];
break;
case 6:
regs[m] += regs[r];
regs[m] %= 1000;
break;
case 7:
regs[m] *= regs[r];
regs[m] %= 1000;
break;
case 8:
regs[m] = memory[regs[r]];
break;
case 9:
memory[regs[r]] = regs[m];
break;
}
cnt++;
if (halt) break;
}
cout << cnt << endl;
return;
}
int main()
{
int n = 0;
cin >> n;
cin.get();
cin.get();
for (int i = 0; i < n; i++)
{
Interpreter();
if (i != n - 1) cout << endl;
}
return 0;
}
/*
1
299
492
495
399
492
495
399
283
279
689
078
100
000
000
000
*/
解读PC/UVa 110106/10033 解释器模拟题
本文详细解析了PC/UVa 110106/10033解释器模拟题的解决方法,介绍了使用C++实现的解释器代码,包括寄存器和内存操作、条件跳转、算术运算等指令的处理,以及如何正确输出结果。
124

被折叠的 条评论
为什么被折叠?



