uvaoj 213 - Message Decoding(二进制,输入技巧)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=149

跨行读字符的函数readchar()  可以学习一下

把编码理解成二进制,用(len,value)这个二元组来表示一个编码,其中len是编码长度,value是编码对应的十进制数值

用code[len][value]保存这个编码所对应的字符

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int code[8][1<<8];
 4 int readchar()
 5 {
 6     for(;;)
 7     {
 8         int ch=getchar();
 9         if(ch!='\n'&&ch!='\r')return ch;
10     }
11 }
12 int readint(int c)//读取接下来c个二进制字符,并返回十进制 
13 {
14     int v=0;
15     while(c--)v=v*2+readchar()-'0';
16     return v;
17 }
18 int readcodes()
19 {
20     memset(code,0,sizeof(code));
21     code[1][0]=readchar();
22     for(int len=2;len<=7;len++)
23     {
24         for(int i=0;i<(1<<len)-1;i++)
25         {
26             int ch=getchar();
27             if(ch==EOF)return 0;
28             if(ch=='\n'||ch=='\r')return 1;
29             code[len][i]=ch;
30         }
31     }
32     return 1;
33 }
34 int main()
35 {
36     while(readcodes())
37     {
38         for(;;)
39         {
40             int len=readint(3);
41             if(len==0)break;
42             for(;;)
43             {
44                 int v=readint(len);
45                 if(v==(1<<len)-1)break;
46                 putchar(code[len][v]);
47             }
48         }
49         putchar('\n');
50     }
51     return 0;
52 }

 

转载于:https://www.cnblogs.com/fqfzs/p/9952242.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值