1023

    xiaoxiao2021-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)