![]() |
#2
neosong2011-10-14 18:57
虽然没细看你是怎么实现的,但是你的二进制串值算反了。就是说,如果输入1011,其值应为11,但是算出来的值却是13,即1101的值。同样,如果输入的是100,则算出来的是001的值,即1。我以你的代码为基础改了一部分,可以实现了。不过可能有格式方面的问题,不一定能通过OJ,但结果至少是正确的。
![]() #include<stdio.h> 以后在论坛上贴代码的时候最好使用CODE,看起来比较方便。#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; } |
#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