输入部分包含两部分,编码头和一串code,注意序列与编码头的对应关系中,序列有着很强的分段规律性,所以选择二维数组code储存,最后解码时直接输出对应code元素即可。
源码如下
#include<iostream>
#include<cstring>
const int maxn = 80;
char code[8][1 << 8];
void readchar();
int readint(int c);
int main()
{
using namespace std;
//int r = readint(3);
//cout << r;
readchar();
//for (int a = 0; a < 1; a++)
//cout << code[2][a];
int m;
while ((m=readint(3)) != 0)
{
int j;//necessary?yes
while ((j = readint(m)) != ((1 << m )- 1))
{
cout << code[m-1][j];
}
}
}
void readchar()
{
for (int i = 0; i < 8; i++)
code[i][1 << 8] = {};
using namespace std;
char head[maxn];
cin.getline(head, maxn);
int len = strlen(head);
int j = 0, k = 0;
for (int i = 0; i < len; i++)
{
code[j][k] = head[i];
if ((k + 1) >= (1 << (j + 1)) - 1) { j++; k = 0; }
else k++;
}
}
int readint(int c)
{
using namespace std;
char ch;
int ans=0;
for (int i = 0; i < c; i++)
{
while ((ch = cin.get()) == '\n')continue;
ans += (ch - '0') << (c - i - 1);
}
return ans;
}