//九度OJ 教程63 大数处理之浮点数加法

//九度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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值