首页 新闻 搜索 专区 学院

求教一段C码该怎么写

0
悬赏园豆:10 [已解决问题] 解决于 2013-12-25 09:54

110111100

101代表一个字母,1代表一个字母,11也是代表一个字母,100代表一个字母,如何将上面这段数字转换为一段字母的

 

太笼统的主页 太笼统 | 初学一级 | 园豆:4
提问于:2013-12-19 22:42
< >
分享
最佳答案
0
#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;
}
收获园豆:10
幻天芒 | 高人七级 |园豆:36662 | 2013-12-20 10:18

a不是固定长度的,我只是举了一个例子。a有可能20位甚至更长

太笼统 | 园豆:4 (初学一级) | 2013-12-21 19:50

懂了  谢谢

太笼统 | 园豆:4 (初学一级) | 2013-12-21 20:26

@太笼统: 

╭︿︿︿╮
{/-●●-/}
 ( (oo) )
  ︶︶︶ 
幻天芒 | 园豆:36662 (高人七级) | 2013-12-24 23:20
其他回答(2)
0

这不算难吧,假设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.还是蛮难的。。。

ThreeTree | 园豆:1490 (小虾三级) | 2013-12-19 23:27
0

这不符合哈夫曼编码啊

谦行 | 园豆:473 (菜鸟二级) | 2013-12-20 10:26

如果是符合的该怎么写呢??

支持(0) 反对(0) 太笼统 | 园豆:4 (初学一级) | 2013-12-21 20:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册