http://ac.jobdu.com/problem.php?cid=1040&pid=62
-
题目描述:
-
求2个浮点数相加的和
题目中输入输出中出现浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj
对于整数部分,P1P2...Pi是一个非负整数
对于小数部分,Qj不等于0
-
输入:
-
对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。
每组测试数据之间有一个空行,每行数据不超过100个字符
-
输出:
-
每组案例是n行,每组测试数据有一行输出是相应的和。
输出保证一定是一个小数部分不为0的浮点数
-
样例输入:
-
2 0.111111111111111111111111111111 0.111111111111111111111111111111 10000000.655555555555555555555555555555 1.444444444444444444444444444445
-
样例输出:
-
0.222222222222222222222222222222 10000002.1
// 题目63:浮点数加法.cpp: 主项目文件。
#include "stdafx.h"
#include <cstdio>
#include <cstring>
#define max(a,b) a>b?a:b
const int N=103;
int a_int[N],a_dec[N],b_int[N],b_dec[N];
char sum[N];
int pointIndex(char *str, int length)
{
int pointPos=0;
while(pointPos<length)
{
if(str[pointPos]=='.')
break;
pointPos++;
}
return pointPos;
}
int initCopy(char *str, int length,int *aint, int *adec)
{
int pointPos=pointIndex(str,length);
int l=pointPos,r=length-pointPos-1;
//memset(aint,0,sizeof(aint));
//memset(adec,0,sizeof(adec));
for(int i=pointPos-1,j=0;i>=0;i--,j++)
aint[j]=str[i]-'0';
for(int i=pointPos+1,j=0;i<length;i++,j++)
adec[j]=str[i]-'0';
return pointPos;
}
void plus(char *str1, int length1, char *str2, int length2)
{
memset(a_int,0,sizeof(a_int));
memset(a_dec,0,sizeof(a_dec));
memset(b_int,0,sizeof(b_int));
memset(b_dec,0,sizeof(b_dec));
int pointPos1=initCopy(str1,length1,a_int,a_dec);
int pointPos2=initCopy(str2,length2,b_int,b_dec);
int max1=max(pointPos1,pointPos2),max2=max(length1-pointPos1-1,length2-pointPos2-1);
memset(sum,0,sizeof(sum));
bool flag=true;
int cur=N-1,end=-1,in=0;
for(int i=max2-1;i>=0;i--)
{
int temp=in+a_dec[i]+b_dec[i];
sum[cur--]=temp%10+'0';
in=temp/10;
if(flag)
{
if(sum[cur+1]!='0')
{
flag=false;
end=cur+1;
}
}
}
sum[cur--]='.';
for(int i=0;i<max1;i++)
{
int temp=in+a_int[i]+b_int[i];
sum[cur--]=temp%10+'0';
in=temp/10;
}
if(in!=0)
sum[cur--]=in+'0';
for(int i=cur+1;i<=end;i++)
putchar(sum[i]);
printf("\n");
}
int main()
{
int testCase;
scanf("%d",&testCase);
while(testCase--)
{
char str1[N],str2[N];
scanf("%s%s",str1,str2);
int length1=strlen(str1),length2=strlen(str2);
plus(str1,length1,str2,length2);
}
return 0;
}