#include<stdio.h>#include<math.h>#include<string.h>char s[250];char a[10][250];int a1[4];int a2[250];char ch;int init(int len){ int tt=0; for(int i=1;i<=7;i++) { for(int j=0;j<(int)pow(2,i)-1;j++) { a[i][j]=s[tt++]; if(tt>=len) break; } if(tt>=len) break; }}int tran(int *aa,int len){ int temp=0; for(int i=len-1,j=0; i>=0; i--,j++) { temp+=(int)aa[i]*pow(2,j); } return temp;}int main(){ while(gets(s)!=NULL) { memset(a,0,sizeof(a)); int len=strlen(s); init(len); while(1) { int t2=0; while(t2<3) { scanf("%c",&ch); if(ch=='1'||ch=='0') { a1[t2]=ch-'0'; t2++; } } int lenth=tran(a1,3); if(lenth==0) { scanf("%c",&ch); printf("\n"); break; } while(1) { int t3=0; while(t3<lenth) { scanf("%c",&ch); if(ch=='1'||ch=='0') { a2[t3]=ch-'0'; t3++; } } int ans=tran(a2,lenth); if(ans!=(int)pow(2,lenth)-1) printf("%c",a[lenth][ans]); else break; } } } return 0;}
Ultraviolet A 213-Message decoding (I think my method is much less code than in the book, and it is not guaranteed to be good ......)