重感冒了,我去,好难受啊。。刷完这题先休息了。。好费力。这题的话中等模拟题,要注意ACCU是5位无符号整数,然后溢出后需要对256取余,PS也一样,溢出要取余,否则必挂!!!我SF了几次去查题解才知道。。尼玛题目里都不说清楚,注意代码里ACCU++,--的处理,其他的没什么了
#include<iostream>
using namespace std;
namespace
{
int operation(bool *b)
{
return b[0] * 4 + b[1] * 2 + b[2];
}
int address(bool *b)
{
return b[3] * 16 + b[4] * 8 + b[5] * 4 + b[6] * 2 + b[7];
}
int value(bool *b)
{
return b[0] * 128 + b[1] * 64 + b[2] * 32 + b[3] * 16 + b[4] * 8
+ b[5] * 4 + b[6] * 2 + b[7];
}
void store(int n, bool *b)
{
for (int i = 7; i >= 0; i--)
{
b[i] = n % 2;
n /= 2;
}
}
void print(int n)
{
bool temp[8];
store(n, temp);
for (int i = 0; i < 8; i++)
cout << (temp[i] ? 1 : 0);
cout << endl;
}
}
int main()
{
bool memory[32][8];
string s;
while (getline(cin, s), s != "")
{
for (int i = 0; i < 32; i++)
{
if (i)
getline(cin, s);
for (size_t j = 0; j < s.size(); j++)
memory[i][j] = s[j] == '1';
}
int accu = 0, pc = 0;
bool *b, end = false;
while (!end)
{
b = memory[pc];
pc = (pc + 1) % 32;
int op = operation(b), addr = address(b);
if (op == 0)
store(accu, memory[addr]);
else if (op == 1)
accu = value(memory[addr]);
else if (op == 2 && !accu)
pc = addr;
else if (op == 4)
accu = (accu + 255) % 256;
else if (op == 5)
accu = (accu + 1) % 256;
else if (op == 6)
pc = addr;
else if (op == 7)
end = true;
}
print(accu);
}
return 0;
}