d681

輸入說明 :

輸入為一個二進位字串加上運算子 and 或 or

輸入的二進位字串<32 (5 bit)

且保證每個二進位字串長度一樣(5bit)

在每一行的最後會有一個空白

例如

10001 or 10000 and 11101 and 01001

    ^  ^       ^     ^       ^    ^        ^

依序是一個運算元+空白+運算子+空白+運算元+...最後是運算元+一個空白

每個運算元的長度都是5bit ,但不一定都是5個運算元+4個運算子

輸出說明 :

輸出轉換後的運算式 與答案

因為我讀進來的是數字1001不是二進位的,所以把它轉成陣列,在做運算

#include<stdio.h>
#include<string.h>
int main()
{
    char buffer[10000];

    int num;
    int num2;
    char op[5];
    int len;
    while(gets(buffer))
    {
        char *p = buffer;

        int bin[5]={0};
        int ans[5];
        int i=0;
        sscanf(p,"%d%*c%n",&num,&len);
        p+=len;
        printf("%05d",num);

        while(0<num)
            {
                bin[i]=num%10;
                num/=10;    
                i++;
            }    

        for(i=0;i<5;i++)
            ans[i]=bin[i]; 

        while(*p)
        {
            sscanf(p,"%s%*c%n",&op,&len);
            p+=len;    
            sscanf(p,"%d%*c%n",&num,&len);
            p+=len;



            if(strcmp(op,"and")==0)
            {
                printf("&&");
                printf("%05d",num);

                //轉成陣列 
                for(i=0;i<5;i++) bin[i]=0;
                i=0;

                while(0<num)
                {
                    bin[i]=num%10;
                    num/=10;    
                    i++;
                }

                for(i=0;i<5;i++)
                    ans[i]&=bin[i];


            }

            else if(strcmp(op,"or")==0)
            {   
                printf("||");
                printf("%05d",num);

                for(i=0;i<5;i++) bin[i]=0;

                i=0;

                while(0<num)
                {
                    bin[i]=num%10;
                    num/=10;    
                    i++;
                }

                for(i=0;i<5;i++)
                    ans[i]|=bin[i];


            }


            if(*p=='\0')
            {

                printf(" = ");
                for(i=4;i>=0;i--)
                    printf("%d",ans[i]);
                puts("");
            }    
        }
    }
    return 0;
}