uva_213_Message Deocding

刘汝佳的解法思路:
定义一个8行258(1<<8)列的全局整形数组,用于存放原始的密码。
方法:编写一个函数,用getchar()将读到字符以整形的形式储存到数组中
然后编写一个函数读长度,根据这个输出数组中的值

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.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()
{
    int len;
    int i;
    memset(code,0,sizeof(code));
    code[1][0]=readchar();
    for(len=2;len<=7;len++){
        for(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;
        }
    }
    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;
}

你可能感兴趣的:(c)