⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1471.cpp

📁 这是哈尔滨工业大学acmOJ的源代码
💻 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 + -