//此题类似于大数相加,但要简单的多,只需要注意两个加数全部为零和1等特殊情况即可
#include <stdio.h>
#include <string.h>
int main()
{
char s1[88],s2[88];
int a1[88],a2[88],n,flag,c;//c表示进位
int len1,len2,i,j;
scanf("%d",&n);
flag=1;
while(n--)
{
memset(a1,0,sizeof(a1));
memset(a2,0,sizeof(a2));
scanf("%s%s",s1,s2);
len1=strlen(s1);len2=strlen(s2);
for(i=0;i<len1;++i)
a1[i]=s1[len1-i-1]-'0';
for(i=0;i<len2;++i)
a2[i]=s2[len2-i-1]-'0';
c=0;//初始化进位为零
for(i=0;i<len1||i<len2;++i)
{
a1[i]+=(a2[i]+c);
c=a1[i]/2;
a1[i]%=2;
}
a1[i]+=c;
i=87;
while(!a1[i])
i--;
printf("%d ",flag++);
if(i<0) printf("0");//处理两个数全部为0的特殊情况
for(j=i;j>=0;--j)
printf("%d",a1[j]);
printf("\n");
}
return 0;
}
hoj10475(二进制大数相加)
最新推荐文章于 2020-09-13 23:27:10 发布