zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    android的布局管理器
    android控件---自定义带文本的ImageButton
    新建android项目src和layout文件夹中没有内容的问题
    android控件---spinner
    maven+springMVC+mybatis+junit详细搭建过程 ***
    JUnit4的使用
    Jenkins集成Docker镜像实现自动发布
    Docker部署tomcat及应用
    Docker的离线安装
    Java中的static关键字解析
  • 原文地址:https://www.cnblogs.com/fish7/p/4077363.html
Copyright © 2011-2022 走看看