这个题目吧,我怎么都理解不了。可能是对getchar()的不熟悉。但是,我也补习了相关的知识,还是有点模糊。总而言之,先把代码敲下来。
BTW,已经三天没去健身房了,怕是要被教练打了。敲完这个我就去!
#include <stdio.h>
#include <string.h>
//我在下面找不到十进制转化为二进制的过程
int code[8][1<<8];
int readchar(){
for(;;){
int ch = getchar();
if(ch != '\n' && ch != '\r')
return ch;
}
}
int readint(int c){
int v = 0;
while(c--){
v = v * 2 + readchar() - '0';
}
return v;
}
int readcodes(){
memset(code,0,sizeof(code));
code[1][0] = readchar();
for(int len = 2; len <= 7; len++){
for(int i = 0; i < (1<<len) - 1; i++){
int ch = getchar();
if(ch == EOF)
return 0;
if(ch == '\n' || ch == '\r') //这个估计是为了,跳行读取
return 1;
code[len][i] = ch; //这里的ch是十进制的
}
}
return 1;
}
int main(){
while(readcodes()){
for(;;){
int len = readint(3);
if(len == 0) //搞不懂这里跳出的理由是什么
break;
for(;;){
int v = readint(len);
if(v == (1 << len) - 1) //这里跳出的理由是?
break;
putchar(code[len][v]);
}
}
putchar('\n');
}
return 0;
}