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 }

 

 

你可能感兴趣的:(encode)