2012年1月22日 星期日

d681: BinaryCount

內容 :
    對一個二進位的數字每一個位元進行 & 、| 運算
    運算規則如下
    1 & 1 = 1
    1 & 0 = 0
    0 & 1 = 0
    0 & 0 = 0
    1 | 1 = 1
    1 | 0 = 1
    0 | 1 = 1
    0 | 0 = 0

輸入說明 :
    輸入為一個二進位字串加上運算子 and 或 or
    輸入的二進位字串<32 (5 bit)
    且保證每個二進位字串長度一樣(5bit)
    在每一行的最後會有一個空白
    例如
    10001 or 10000 and 11101 and 01001
         ^    ^      ^      ^       ^      ^       ^
    依序是一個運算元+空白+運算子+空白+運算元+...最後是運算元+一個空白
    每個運算元的長度都是5bit ,但不一定都是5個運算元+4個運算子

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

範例輸入 :
10001 or 10000 and 11101 and 01001
10111 or 10111 or 10010 or 00101
01000 and 01001 or 10011 and 11101
10111 and 00011 or 10010 or 11011
01001 and 10110 or 10010 and 11101

範例輸出 :
10001||10000&&11101&&01001 = 00001
10111||10111||10010||00101 = 10111
01000&&01001||10011&&11101 = 11001
10111&&00011||10010||11011 = 11011
01001&&10110||10010&&11101 = 10000

程式碼 :
#include <stdio.h>

int main()
{
    int i,check;
    char s[2][6],operate[5],nouse[2];
    
    while(scanf(" %s%2c",&s[0],nouse)==2)
    {
        printf("%s",s[0]);
        while(nouse[1]!='\n')
        {
            scanf(" %s %s",operate,s[1]);
            check=0;
            if(operate[0] == 'n')
                check=1;
            if(check)
            {
                printf("&&%s",s[1]);
                for(i=0;i<5;i++)
                    s[0][i] &= s[1][i];
            }
            else
            {
                printf("||%s",s[1]);
                for(i=0;i<5;i++)
                    s[0][i] |=  s[1][i];
            }
            scanf("%2c",nouse);
        }
        printf(" = %s\n",s[0]);
    }   
    return 0;
}



http://zerojudge.tw/ShowProblem?problemid=d681

沒有留言:

張貼留言