//九度OJ 教程63 大数处理之浮点数加法
//http://ac.jobdu.com/problem.php?cid=1040&pid=62
//大数处理,加法哦也
#include<stdio.h>
#include<string.h>
#define N 202
int main()
{
char ha[N],hb[N];
int la,lb,ls,a,b,s,flag,is,hs[N],i,j,n;
scanf("%d",&n);
while(n--)
{
scanf("%s",ha);
scanf("%s",hb);
memset(hs,0,N*sizeof(int));
la=strlen(ha);
lb=strlen(hb);
for(i=0,flag=1;flag;i++)
{
if(ha[i]=='.'){a=i;flag--;}//a标记ha的小数点位置。
}
for(i=0,flag=1;flag;i++)
{
if(hb[i]=='.'){b=i;flag--;}
}
for(s=(a>b?a:b),is=s,i=a+1,j=b+1;i<la&&j<lb;i++,j++,is++)
{
hs[is]=ha[i]-'0'+hb[j]-'0';
}
for(;i<la;i++,is++)hs[is]=ha[i]-'0';
for(;j<lb;j++,is++)hs[is]=hb[j]-'0';
ls=is;//记下hs的数组长度(指向最右的一位)
for(is=s-1,i=a-1,j=b-1;i>=0&&j>=0;i--,j--,is--)
{
hs[is]=ha[i]-'0'+hb[j]-'0';
}
for(;i>=0;i--,is--)
hs[is]=ha[i]-'0';
for(;j>=0;j--,is--)
hs[is]=hb[j]-'0';
for(i=ls;i;i--)//处理进位
{
if(hs[i]>9)
{
hs[i]-=10;
hs[i-1]++;
}
}
for(;!hs[ls];ls--);//处理小数部分末尾的0
if(s==1&&hs[0]==0)//若整数部分为零
{
printf("0.");
for(i=s;i<=ls;i++)printf("%d",hs[i]);
printf("\n");
continue;
}
if(hs[0]>9)
{
printf("1");
hs[0]-=10;
}
for(i=0;i<s;i++)printf("%d",hs[i]);
printf(".");
for(i=s;i<=ls;i++)printf("%d",hs[i]);
printf("\n");
}
return 0;
}
//九度OJ 教程63 大数处理之浮点数加法
最新推荐文章于 2023-11-04 08:54:27 发布