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; }