hdu 5083 Instruction (稍比较复杂的模拟题)

题意:

二进制指令转汇编指令,汇编指令转二进制指令。

思路:

额,条理分好,想全,思维不能乱。

代码:

int findyu(char yu[50],char c){
    int l=strlen(yu);
    rep(i,0,l-1) if(c==yu[i]) return i;
}
int calc(char t[50],int x,int k){
    int res=0;
    rep(i,x,x+k-1) res*=10, res+=(t[i]-'0');
    return res;
}
int calc2(char t[50]){
    int l=strlen(t);
    int res=0;
    rep(i,0,l-1) res*=2, res+=(t[i]-'0');
    return res;
}
void print(int x){
    int t1[10];
    int c=0;
    rep(i,0,4){
        t1[++c]=(x&1);
        x>>=1;
    }
    rep2(i,c,1) printf("%d",t1[i]);
}
int main(){
    //freopen("test.in","r", stdin);

    int kind;
    map<string,string> mp1;
    mp1["ADD"]="000001";
    mp1["SUB"]="000010";
    mp1["DIV"]="000011";
    mp1["MUL"]="000100";
    mp1["MOVE"]="000101";
    mp1["SET"]="000110";
    map<string,string> mp2;
    mp2["000001"]="ADD";
    mp2["000010"]="SUB";
    mp2["000011"]="DIV";
    mp2["000100"]="MUL";
    mp2["000101"]="MOVE";
    mp2["000110"]="SET";
    while(scanf("%d",&kind)!=EOF){
        if(kind==1){
            char ins[50],yu[50];
            int ra,rb=0;
            scanf("%s%s",ins,yu);
            if(strcmp(ins,"SET")==0)
                ra=calc(yu,1,strlen(yu)-1);
            else{
                int tc=findyu(yu,',');
                ra=calc(yu,1,tc-1);
                rb=calc(yu,tc+2,strlen(yu)-tc-2);
            }
            cout<<mp1[string(ins)];
            if(ins=="SET"){
                print(ra);
                printf("00000
");
                continue;
            }
            print(ra);
            print(rb);
            cout<<endl;
            continue;
        }
        else{
            char str[50];
            scanf("%s",str);
            if(strlen(str)!=16){
                cout<<"Error!"<<endl;
                continue;
            }
            char ope[50],rra[50],rrb[50];
            rep(i,0,5) ope[i]=str[i]; ope[6]=0;
            rep(i,6,10) rra[i-6]=str[i]; rra[5]=0;
            rep(i,11,15) rrb[i-11]=str[i]; rrb[5]=0;
            int ra=calc2(rra);
            int rb=calc2(rrb);
            if(strcmp(ope,"000110")==0){
                if(rb!=0){
                    cout<<"Error!"<<endl;
                    continue;
                }
                if(ra<1 || ra>31){
                    cout<<"Error!"<<endl;
                    continue;
                }
                printf("SET R%d
",ra);
                continue;
            }
            if(ra<1 || ra>31 || rb<1 || rb>31){
                cout<<"Error!"<<endl;
                continue;
            }
            if(mp2[string(ope)]==""){
                cout<<"Error!"<<endl;
                continue;
            }
            cout<<mp2[string(ope)];
            printf(" R%d,R%d
",ra,rb);
            continue;
        }
    }

    //fclose(stdin);
}
原文地址:https://www.cnblogs.com/fish7/p/4077363.html