XTU1154 Encode 编码

中文题

http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1154

一个八位,前三位表示个数,后五位表示字母000 0000, 注意前三位000 表示1个字母 , 后五位00000 表示字母a

由于4位二进制表示一个十六进制.

如:001 00000 表示2个a,即aa,

所以前面的三位只要乘以2就是了,后面的一位在加上就可以了.

如:101 1    知道前三位的十进制为5 ,那么该数为5*2 + 1

而后面的四位则需要减去高位的数字才是后四位数,若高位为1,则减去16(2^4).

如:1 1010 十进制26 - 16 = 10

PS: 9个z是8个z+1个z

 

View Code
 1 /*
 2 题目描述
 3 行程编码是一种常见的无损压缩方式。比如针对于纯英文小写字符我们可以按以下方式进行编码:每个字节的低5位表示英文小写字母的序号(从0到25),高3位表示此字母连续的次数-1(0到7依次表示连续1到8次)。比如说一个字节的二进制为00100001,其表示字符串bb。给你一个字符串,试将字符串编码为对应的行程编码,并将编码字节的16进制输出。
 4 
 5 输入
 6 第一行是一个整数K,表示样例的个数。以后每行是一个待编码的小写英文字母组成的字符串,其长度不超过1000个字符。
 7 
 8 输出
 9 每行输出一个编码的16进制数码串(10~15使用a~f表示)。
10 
11 样例输入
12 4
13 aabb
14 a
15 aaaaaaaaa
16 zzzzzzzzz
17 
18 样例输出
19 2021
20 00
21 e000
22 f919
23 
24 */
25 #include <iostream>
26 #include <string>
27 using namespace std;
28 
29 void getnum(char c, int n)
30 {
31     n <<= 1;
32     int m = c - 'a';
33     if (m > 15)  //若高位为1
34     {
35         n += 1;
36         m -= 16;
37     }
38     if (n  < 10)
39         cout<<n;
40     else
41         cout<<char('a' + n - 10);
42     n = m;
43     if (n  < 10)
44         cout<<n;
45     else
46         cout<<char('a' + n - 10);
47 }
48 
49 void show(int cont, char c)
50 {
51     while (cont >8)
52     {
53         cont -= 8;
54         getnum(c, 7);
55     }
56     getnum(c, cont-1);
57 }
58 
59 int main()
60 {
61     string str;
62     char c;
63     int i, j;
64     int n;
65     int len, cont;
66     cin>>n;
67     while (n--)
68     {
69         cin>>str;
70         len = str.length();
71         c = str[0];
72         cont = 0;
73         for (i=0; i<len; i++)
74         {
75             if (c == str[i]) cont++;   //求得相邻字符相同的个数
76             else
77             {
78                 //    cout<<cont<<"    ";
79                 show(cont, c);
80                 cont = 1;
81                 c = str[i];
82             }
83         }
84         //cout<<cont<<endl;
85         show(cont, c);   //注意最后还要判断
86         cout<<endl;
87     }
88     return 0;
89 }

 

 

posted @ 2013-03-10 22:06  旅行的蜗牛  阅读(141)  评论(0编辑  收藏  举报