有一天,小明在網路上看到一種神奇的魔法
根據小明的推測,這種魔法似乎是一種數學布林函數
這個函數是長這樣的:
輸入部分:
A、B和C
輸出部分:
S 和 C'
S = A xor B xor C
C' = (A and B) or (B and C) or (C and A)
小明將好多個這種函數當成丸子般串起來
並且把兩個布林數列代進去
神奇的事情發生了...
當A為0010
B為0011
所得到的S數列竟然是0101!!!
//==================
小明今天想做實驗,看看代入不同的A和B,所得到的S數列是長什麼樣子
輸入說明 :
給定兩個數列A和B(AB兩者長度皆為32)
輸出說明 :
S數列
範例輸入 :
00000000000000000000000000001100
00000000000000000000000000001101
範例輸出 :
00000000000000000000000000001100
00000000000000000000000000001101
---------------------------------
00000000000000000000000000011001
****End of Data******************
程式碼 :
#include<stdio.h>
int main()
{
int i,carry;
char a[33],b[33],s[33];
char line[34] = "---------------------------------";
char end[34] = "****End of Data******************";
while(scanf("%s%s",a,b)==2)
{
for(i=0; i<32; i++)
{
a[i] -= '0';
b[i] -= '0';
}
carry = 0;
for(i=31; i>-1; i--)
{
s[i] = a[i] ^ b[i] ^ carry;
carry = (a[i] & b[i]) | (b[i] & carry) | (a[i] & carry);
}
s[32] = '\0';
for(i=0; i<32; i++)
{
a[i] += '0';
b[i] += '0';
s[i] += '0';
}
printf("%s\n%s\n%s\n%s\n%s\n", a, b, line, s, end);
}
return 0;
}
http://zerojudge.tw/ShowProblem?problemid=d632
沒有留言:
張貼留言