#include
<
stdio.h
>
#include
<
string
.h
>
#include
<
memory.h
>
//
将数字从十进制转换到制定进制
//
input:
//
n: 要转换的数字(十进制)
//
m: 要转换的进制
//
output:
//
a,l: 要求进制的数字,和位数,[0]为最低位
void
split(
int
n,
int
m,
int
a[],
int
&
l)
{
l
=
0
;
for
(;n;n
/=
m)
{
a[l
++
]
=
n
%
m;
}
}
void
print(
int
a[],
int
l)
{
for
(
int
i
=
0
;i
<
l;i
++
)
printf(
"
%d
"
,a[i]);
printf(
"
\n
"
);
}
//
将指定进制的数字做xor运算
//
input:
//
a,n1,b,n2
//
m
//
output:
//
c
int
xor(
int
const
a[],
int
n1,
int
const
b[],
int
n2,
int
m,
int
c[])
{
int
k
=
n1
>
n2
?
n1:n2;
for
(
int
i
=
0
;i
<
k;i
++
)
{
c[i]
=
(a[i]
+
b[i])
%
m;
}
return
k;
}
int
A[
50
];
int
nA
=
0
;
int
nB
=
0
;
int
B[
50
];
int
nC
=
0
;
int
C[
50
];
//
将数字从指定进制转换到十进制
int
merge(
int
const
a[],
int
n1,
int
m)
{
int
r
=
0
;
for
(
int
i
=
0
;i
<
n1;i
++
)
{
r
=
r
*
m
+
a[n1
-
1
-
i];
}
return
r;
}
int
main(
int
argc,
char
*
argv[])
{
int
T;
scanf(
"
%d
"
,
&
T);
while
(T
--
)
{
int
a,b
=
0
,m;
char
s[
1000
+
1
];
scanf(
"
%d %s %d
"
,
&
a,s,
&
b);
m
=
strlen(s)
+
1
;
//
printf("a %d b %d m %d\n",a,b,m);
memset(A,
0
,
sizeof
(A));
memset(B,
0
,
sizeof
(B));
memset(C,
0
,
sizeof
(C));
split(a,m,A,nA);
split(b,m,B,nB);
//
print(A,nA);
//
print(B,nB);
nC
=
xor(A,nA,B,nB,m,C);
//
print(C,nC);
int
r
=
merge(C,nC,m);
printf(
"
%d\n
"
,r);
}
return
0
;
}