首页
IT
登录
6mi
u
盘
搜
搜 索
IT
1023
1023
xiaoxiao
2021-12-02
41
#include
<stdio.h>
int
main() {
int
n,m;
//n表示测试数据的个数。m表示位数
int
i,k;
//i用于循环,k表示向高位的借位
int
a[
65
],b[
65
],c[
65
];
//a存原本的数。b存每一位的操作。c存需要的到的数
char
ch;
__int64
number;
scanf(
"%d"
,&n);
for
(;n>
0
;n--)
{
k=
0
;
scanf(
"%d
"
,&m);
for
(i=m;i>
0
;i--)
{
scanf(
"%c"
,&ch);
if
(ch==
'p'
)
b[i]=
1
;
else
b[i]=-
1
;
}
scanf(
"%I64d"
,&number);
if
(number<
0
)
//当number为负数时只需将b反向就可以了
{
number=number*-
1
;
for
(i=
1
;i<=m;i++)
b[i]=-
1
*b[i];
}
for
(i=
1
;i<=m;i++)
{
c[i]=number%
2
;
number/=
2
;
}
for
(i=
1
;i<=m;i++)
{
a[i]=(c[i]+k)%
2
;
if
(k==
0
)
{
if
(b[i]+c[i]==
0
)
k=
1
;
}
else
{
if
(b[i]+c[i]==
1
)
k=
0
;
}
}
if
(k==
1
)
printf(
"Impossible\n"
);
else
{
for
(;m>
0
;m--)
printf(
"%d"
,a[m]);
printf(
"\n"
);
}
}
return
0
; }
#include
<stdio.h>
int
main() {
int
n,m;
//n表示测试数据的个数。m表示位数
int
i,k;
//i用于循环,k表示向高位的借位
int
a[
65
],b[
65
],c[
65
];
//a存原本的数。b存每一位的操作。c存需要的到的数
char
ch;
__int64
number;
scanf(
"%d"
,&n);
for
(;n>
0
;n--)
{
k=
0
;
scanf(
"%d
"
,&m);
for
(i=m;i>
0
;i--)
{
scanf(
"%c"
,&ch);
if
(ch==
'p'
)
b[i]=
1
;
else
b[i]=-
1
;
}
scanf(
"%I64d"
,&number);
if
(number<
0
)
//当number为负数时只需将b反向就可以了
{
number=number*-
1
;
for
(i=
1
;i<=m;i++)
b[i]=-
1
*b[i];
}
for
(i=
1
;i<=m;i++)
{
c[i]=number%
2
;
number/=
2
;
}
for
(i=
1
;i<=m;i++)
{
a[i]=(c[i]+k)%
2
;
if
(k==
0
)
{
if
(b[i]+c[i]==
0
)
k=
1
;
}
else
{
if
(b[i]+c[i]==
1
)
k=
0
;
}
}
if
(k==
1
)
printf(
"Impossible\n"
);
else
{
for
(;m>
0
;m--)
printf(
"%d"
,a[m]);
printf(
"\n"
);
}
}
return
0
; }
转载请注明原文地址: https://ju.6miu.com/read-679717.html
专利
最新回复
(
0
)