例
110111100
101代表一个字母,1代表一个字母,11也是代表一个字母,100代表一个字母,如何将上面这段数字转换为一段字母的
#include <stdio.h> int main(int argc, char *argv[]) { int a=110111100; int temp; int i,j=0; char ch[10]; while(a>0) { temp=a%1000; if(temp==101) { ch[j++]='A'; a/=1000; } else if(temp==100) { ch[j++]='B'; a/=1000; } else { temp=temp%100; if(temp==11) { ch[j++]='C'; a/=100; } else { temp%=10; if(temp==1) { ch[j++]='D'; } a/=10; } } } for(i=j-1;i>=0;i--) { printf("%c",ch[i]); } return 0; }
a不是固定长度的,我只是举了一个例子。a有可能20位甚至更长
懂了 谢谢
@太笼统:
╭︿︿︿╮ {/-●●-/} ( (oo) ) ︶︶︶
这不算难吧,假设101-a,1-b,11-c,100-d。首先取三个字符110,发现不是101,也不是100,接着取两个字符11,匹配上了c,移动两个字符,继续取三个字符011,没有匹配,取两个字符01,还是没有匹配,取一个字符0,还是没有匹配。晕,本来还以为是题目有问题,仔细一看,原来有重合的部分,11可以算两个1。
目前,我只能想到试错了,不过试错也有讲究,这里的情况,只要匹配到101或者100就一定是正确的,不需要考虑分开来的情况。那么只有11可能是两个1的情况了,所以答案应该是
接着上面的步骤,发现都匹配不了,于是回滚到上一步,只取一个字符1,然后是三个字符101,然后是三个字符111,不匹配,取两个字符11,匹配,接着三个字符100,匹配,结果是bacd或者是babbd。
实际上只要是11可以出现的地方,都可以无条件置换成两个1.还是蛮难的。。。
这不符合哈夫曼编码啊
如果是符合的该怎么写呢??