您的位置:首页 > 其它

POJ 2845 01000001(高精度)

2015-10-04 11:32 288 查看
Description

给出a和b两个01串,模拟二进制加法过程输出a+b

Input

第一行为一整数T表示用例组数,每组用例占一行包括两个01串

Output

对于每组用例,输出两个01串相加的结果(最简形式)

Sample Input

3

1001101 10010

1001001 11001

1000111 1010110

Sample Output

1 1011111

2 1100010

3 10011101

Solution

高精度加法,注意前置0

Code

#include<stdio.h>
#include<string.h>
void solve(char *a,char *b,char *c)
{
int l1=strlen(a),l2=strlen(b),x[111],y[111],z[111];
int l=l1>l2?l1:l2;
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
memset(z,0,sizeof(z));
for(int i=l1-1;i>=0;i--)
x[l1-1-i]=a[i]-'0';
for(int i=l2-1;i>=0;i--)
y[l2-1-i]=b[i]-'0';
int k=0;
for(int i=0;i<l;i++)
{
z[i]=(x[i]+y[i]+k)%2;
k=(x[i]+y[i]+k)/2;
}
z[l++]=k;
while(l>=0&&z[l-1]==0)l--;//去前置0
if(l==0)//a+b=0时特判
{
c[0]='0';
c[1]='\0';
return ;
}
for(int i=0;i<l;i++)
c[i]=z[l-1-i]+'0';
c[l]='\0';
}
int main()
{
char s1[111],s2[111],ans[111];
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%s%s",s1,s2);
solve(s1,s2,ans);
printf("%d %s\n",i,ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: