好大的模拟啊,坑点太多了
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
char operation_code[6][7]= {"000001",
"000010",
"000011",
"000100",
"000101",
"000110",
};
char binary[40][7]= {"00001",
"00010",
"00011",
"00100",
"00101",
"00110",
"00111",
"01000",
"01001",
"01010",
"01011",
"01100",
"01101",
"01110",
"01111",
"10000",
"10001",
"10010",
"10011",
"10100",
"10101",
"10110",
"10111",
"11000",
"11001",
"11010",
"11011",
"11100",
"11101",
"11110",
"11111"
};
char operation[5];
int main()
{
int sign;
while(scanf("%d",&sign)!=EOF)
{
if(sign==1)
{
scanf("%s",operation);
char ch[30];
scanf("%s",ch);
int pos1=0,pos2=0;
int flag=1;
for(int i=0; i<strlen(ch); i++)
{
if(ch[i]>='0'&&ch[i]<='9'&&flag)
{
pos1=pos1*10+ch[i]-'0';
}
else if(ch[i]==',')
{
flag=0;
}
else if(ch[i]>='0'&&ch[i]<='9'&&!flag)
{
pos2=pos2*10+ch[i]-'0';
}
else
continue;
}
char binary_code1[10],binary_code2[10];
if(!strcmp(operation,"ADD"))
{
printf("000001");
printf("%s",binary[pos1-1]);
printf("%s\n",binary[pos2-1]);
}
else if(!strcmp(operation,"SUB"))
{
printf("000010");
printf("%s",binary[pos1-1]);
printf("%s\n",binary[pos2-1]);
}
else if(!strcmp(operation,"DIV"))
{
printf("000011");
printf("%s",binary[pos1-1]);
printf("%s\n",binary[pos2-1]);
}
else if(!strcmp(operation,"MUL"))
{
printf("000100");
printf("%s",binary[pos1-1]);
printf("%s\n",binary[pos2-1]);
}
else if(!strcmp(operation,"MOVE"))
{
printf("000101");
printf("%s",binary[pos1-1]);
printf("%s\n",binary[pos2-1]);
}
else if(!strcmp(operation,"SET")) //注意SET的Rb为0
{
printf("000110");
printf("%s",binary[pos1-1]);
printf("00000\n");
}
}
else
{
char ch1[20];
scanf("%s",ch1);
int sum=0;
for(int i=0; i<=5; i++)
{
sum+=(ch1[i]-'0')*pow(2.0,(double)5-i);
}
if(sum>6||sum<1) //sum值可能小于1啊啊啊啊啊啊
{
puts("Error!");
continue;
}
else
{
int pos1=0,pos2=0;
for(int i=6; i<=10; i++)
{
pos1+=(ch1[i]-'0')*pow(2.0,(double)(10-i));
}
for(int i=11; i<=15; i++)
{
pos2+=(ch1[i]-'0')*pow(2.0,(double)(15-i));
}
if(sum==6)
{
if(pos2!=0||pos1==0) //Ra的值不能为0,Rb的值只能为0(PS:好绕)
{
puts("Error!");
continue;
}
else
printf("SET R%d\n",pos1);
}
else
{
if(pos1>=1&&pos1<=31&&pos2>=1&&pos2<=31)
{
if(sum==1)
{
printf("ADD R%d,R%d\n",pos1,pos2);
}
else if(sum==2)
{
printf("SUB R%d,R%d\n",pos1,pos2);
}
else if(sum==3)
{
printf("DIV R%d,R%d\n",pos1,pos2);
}
else if(sum==4)
{
printf("MUL R%d,R%d\n",pos1,pos2);
}
else
{
printf("MOVE R%d,R%d\n",pos1,pos2);
}
}
else{
puts("Error!");
}
}
}
}
}
return 0;
}