📄 1471.cpp
字号:
/* This Code is Submitted by wywcgs for Problem 1471 on 2006-02-01 at 15:54:20 */
#include <cstdio>
const int INTRO_N = 32;
enum { STA = 0, LDA, BEQ, NOP, DEC, INC, JMP, HLT };
class PC {
private:
int intro[INTRO_N];
public:
bool make();
int run(int);
};
bool PC::make() {
int i, j; char buf[9];
for(i = 0; i < INTRO_N; i++) {
if(gets(buf) == NULL) return false;
intro[i] = 0;
for(j = 0; buf[j] != 0; j++) intro[i] = intro[i]*2+buf[j]-'0';
}
return true;
}
int PC::run(int now) {
int accu = 0;
while(true) {
int ino = intro[now] >> 5, num = intro[now] & 31;
switch(ino) {
case STA: intro[num] = accu; break;
case LDA: accu = intro[num]; break;
case DEC: accu = (accu-1)&255; break;
case INC: accu = (accu+1)&255; break;
case BEQ: if(accu != 0) break;
case JMP: now = num; break;
case HLT: return accu;
}
if(ino != JMP && (ino != BEQ || accu != 0)) now++;
now &= 31;
}
}
char* parse(int);
int main()
{
PC pc;
while(pc.make()) printf("%s\n", parse(pc.run(0)));
return 0;
}
char* parse(int r)
{
static char buf[9] = { 0 }; int i;
for(i = 7; i >= 0; i--, r >>= 1) buf[i] = (r&1)+'0';
return buf;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -