1.3按位AND和按位OR

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

已知长度为n的两个位串a和b,求它们的按位AND和按位OR。

Input

多组测试数据,每组测试数据第1行输入位串长度n(0 < n <= 64),第2行输入n个以空格隔开的取值为0或1的整数表示位串a,第3行输入n个以空格隔开的取值为0或1的整数表示位串b。

Output

每组测试数据占两行,第一行输出n个以空格隔开的取值为0或1的整数表示a位串和b位串的按位AND,第2行输出n个以空格隔开的取值为0或1的整数表示a位串和b位串的按位OR。

Sample Input

5
1 0 0 1 0
0 0 0 1 1

Sample Output

0 0 0 1 0
1 0 0 1 1
#include <stdio.h>
#include <stdlib.h>
#include <math.h> int main()
{
int a[65], b[65], c[65], d[65];
int i, n;
while(~scanf("%d", &n))
{
for(i=1; i<=n; i++)
scanf("%d", &a[i]);
for(i=1; i<=n; i++)
scanf("%d", &b[i]);
for(i=1; i<=n; i++)
{
if(!a[i] && !b[i])
{
c[i] = 0;
d[i] = 0;
}
else if((a[i] && !b[i]) || (!a[i] && b[i]))
{
c[i] = 0;
d[i] = 1;
}
else if(a[i] && b[i])
{
c[i] = 1;
d[i] = 1;
}
}
for(i=1; i<n; i++)
printf("%d ", c[i]);
printf("%d\n", c[i]);
for(i=1; i<n; i++)
printf("%d ", d[i]);
printf("%d\n", d[i]);
} return 0;
}

AND就是合取,OR就是析取;

05-11 17:30