原题链接:https://vjudge.net/problem/UVA-213
分类:函数
备注:二进制
反思:fgets()对’\n’很敏感啊,要记住,别总是debug的时候才想起来…
思路
- 注意二进制编码的长度和其最大值的关系,即最大值为(1<<length)-2。
- 建立字符数组ch[length][value]来匹配每个字符对应的编码。
代码如下:
#include<stdio.h>
#include<string.h>
using namespace std;
const int maxl = 8;
char ch[maxl][1 << maxl], s[1 << maxl];
int read(int len)
{
char ch; int x = 0;
for (int i = 0; i < len; i++)
{
ch = getchar();
while (ch == ' ' || ch == '\n')ch = getchar();
x = (x << 1) + ch - '0';
}
return x;
}
int main(void)
{
while (fgets(s, 1 << maxl, stdin))
{
for (int len = 1, i = 0, flag = 1; flag; len++)
{
int tmp = (1 << len) - 1;
for (int num = 0; num < tmp; num++)
{
ch[len][num] = s[i++];
if (s[i] == '\n') { flag = 0; break; }
}
}
while (int len = read(3))
while (1)
{
int num = read(len);
if (num == (1 << len) - 1)break;
printf("%c", ch[len][num]);
}
printf("\n");getchar();
}
return 0;
}