原题链接: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;
}
本文深入探讨了二进制编码与字符之间的映射关系,通过建立字符数组匹配编码,实现对输入字符串的正确解析。文章详细介绍了如何利用二进制特性,构建编码表并读取特定长度的二进制数,最终将这些数字转换为对应的字符输出。
&spm=1001.2101.3001.5002&articleId=104436630&d=1&t=3&u=6ee3f369b5294ca7b318446681db7e88)
1156

被折叠的 条评论
为什么被折叠?



