标题:ACM高手帮忙看看
只看楼主
hyb472221439
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2011-10-4
结帖率:0
已结贴  问题点数:0 回复次数:1 
ACM高手帮忙看看
#include<stdio.h>
#include<math.h>
int main()
{
    int B[32];
    char a;
    int i,f,m;   
    while(scanf("%1c",&a)!=EOF)
        {    i=1;        
            m=a-48;
            for(;;)
                {                    
                    scanf("%1c",&a);
                    if(a=='\n')
                        break;
                    i++;
                    f=a-48;
                    m=m+f*(int)pow(2,i-1);
                }        
            for(i=1;;)
                {   
                    B[i]=m%10;
                    if(m<10)
                        break;
                    m=(m-m%10)/10;
                    i++;            
                }
            for(;i>0;i--)
                {   
                    switch(B[i])
                        {
                            case    0:printf("0000");break;
                            case    1:printf("0001");break;
                            case    2:printf("0010");break;
                            case    3:printf("0011");break;
                            case    4:printf("0100");break;
                            case    5:printf("0101");break;
                            case    6:printf("0110");break;
                            case    7:printf("0111");break;
                            case    8:printf("1000");break;
                            case    9:printf("1001");break;
                        }
                }
             printf("\n");
        }
    return 0;
}





在数字电路中,需要将采集的信号输出到7段显示器上。但是由于器件采集到机器上的是二进制的序列,而显示需要的是BCD码。现在需要你编写一个小程序来解决显示的问题。 bcd码是十位二进制码, 也就是将十进制的数字转化为二进制, 但是和普通的转化有一点不 同, 每一个十进制的数字0-9都对应着一个四位的二进制码,对应关系如下: 十进制0 对应 二进 制0000 1 0001 2 0010 ....... 9 1001 接下来的10就有两个上述的码来表示 10 表示为 00010000

每行输入一串二进制序列(长度小于30)。

每行输出该序列的BCD码。

Sample Input
1
10
11


Sample Output
0001
0010
0011

搜索更多相关主题的帖子: include break while 
2011-10-14 16:48
neosong
Rank: 2
等 级:论坛游民
帖 子:3
专家分:28
注 册:2011-10-14
得分:20 
虽然没细看你是怎么实现的,但是你的二进制串值算反了。就是说,如果输入1011,其值应为11,但是算出来的值却是13,即1101的值。同样,如果输入的是100,则算出来的是001的值,即1。我以你的代码为基础改了一部分,可以实现了。不过可能有格式方面的问题,不一定能通过OJ,但结果至少是正确的。
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int B[32];
    char a[32];
    int i,f,m,b;  

    while(true)
        {
               i=0;
               m=0;
            for(;;)
                {                   

                    scanf("%1c",&a[i]);
                    b=i;
                    if(a[i]=='\n')
                        break;
                    i++;
                }
            for(i=0;;i++)
            {
                         if(a[i]=='\n')break;
                    //printf("%c\n",a[i]);          

                    f=a[i]-48;
                    //printf("%d\n",f);
                    m=m+f*(int)pow(2,b-i-1);
                    //printf("m is %d\n",m);
            }       

            for(i=1;;)
                {  

                    B[i]=m%10;
                    if(m<10)
                        break;
                    m=(m-m%10)/10;
                    i++;           

                }
            for(;i>0;i--)
                {  

                    //printf("%d ",B[i]);
                    switch(B[i])
                        {
                            case    0:printf("0000");break;
                            case    1:printf("0001");break;
                            case    2:printf("0010");break;
                            case    3:printf("0011");break;
                            case    4:printf("0100");break;
                            case    5:printf("0101");break;
                            case    6:printf("0110");break;
                            case    7:printf("0111");break;
                            case    8:printf("1000");break;
                            case    9:printf("1001");break;
                        }
                        //printf("\n");
                }
             printf("\n");
        }
    return 0;
}

以后在论坛上贴代码的时候最好使用CODE,看起来比较方便。
2011-10-14 18:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-352444-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.276002 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved