把所有数字用%x读进来
然后按二进制从第一个开始依次处理就好了
每次先判断这个k的这个位置是0是否可以满足题意如果不可以那便是1
然后每次做一个验证就可以了
1
#include<stdio.h>
2
int a[8],b[32];
3
int main()
4

{
5
int KASE,i,sum,t,ans,j,l;
6
scanf("%d",&KASE);
7
while(KASE--)
8

{
9
for(i=0;i<32;i++)b[i]=0;
10
for(i=0;i<8;i++)scanf("%x",&a[i]);
11
// for(i=0;i<8;i++)printf("%d ",a[i]);printf("\n");
12
scanf("%x",&sum);ans=0;
13
for(i=0;i<32;i++)
14

{
15
t=0;
16
for(j=0;j<8;j++)t+=(a[j]^0)&1;
17
t=(t+ans)&1;
18
if(t==(((sum)^0)&1))b[i]=0;
19
else b[i]=1;
20
//printf("%d %d %d %d\n",t,(((sum)^0)&1),b[i],i);
21
t=0;
22
if(b[i]==1)for(j=0;j<8;j++)t+=(a[j]^1)&1;
23
else for(j=0;j<8;j++)t+=(a[j]^0)&1;
24
for(j=0;j<8;j++)a[j]=a[j]>>1;
25
ans=(ans+t)>>1;
26
sum=sum>>1;
27
}
28
ans=0;
29
for(i=31;i>=0;i--)
30

{
31
ans=ans+(b[i]<<i);
32
//printf("%d",b[i]);
33
// if(i%4==0)printf(" ");
34
}
35
// printf("\n");
36
printf("%x\n",ans);
37
}
38
return 0;
39
}
40