大明A+B

来源:互联网 发布:数据分析属于什么专业 编辑:程序博客网 时间:2024/06/08 14:52
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。

现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。

Input

本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。

Output

请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。

Sample Input

1.1 2.91.1111111111 2.34443233431 1.1

Sample Output

43.4555434454

2.1

#include<stdio.h>#include<string.h>#define MAXN 500char a[MAXN],b[MAXN];int c[MAXN],d[MAXN],e[MAXN],f[MAXN],x[MAXN],y[MAXN];int main(){int i,j,k,m,p,q,len1,len2,t;while(scanf("%s%s",a,b)!=EOF){memset(c,0,sizeof(c));memset(d,0,sizeof(d));memset(e,0,sizeof(e));memset(f,0,sizeof(f));//memset(x,0,sizeof(x));//memset(y,0,sizeof(y));k=len1=strlen(a);for(i=0;i<len1;i++){if(a[i]=='.')k=i;//the point position of first }m=len2=strlen(b);for(i=0;i<len2;i++){if(b[i]=='.')m=i;//the point position of second }/*change char of zhengshu to int */for(j=0,i=k-1;i>=0;i--){c[j++]=a[i]-'0';}for(j=0,i=m-1;i>=0;i--){d[j++]=b[i]-'0';}//change char of xiaoshu to intfor(j=0,i=k+1;i<len1;i++){e[j++]=a[i]-'0';}for(j=0,i=m+1;i<len2;i++){f[j++]=b[i]-'0';}//count the xiaoshup=q=0;if(len1-k<len2-m)p=len2-m;elsep=len1-k;for(i=p-1;i>=0;i--){x[i]=(e[i]+f[i]+q)%10;if(e[i]+f[i]+q>=10){q=(e[i]+f[i]+q)/10;}elseq=0;}//count the zhengsu if(k<m)t=m;elset=k;for(i=0;i<=t;i++){y[i]=(c[i]+d[i]+q)%10;if(c[i]+d[i]+q>=10){q=(c[i]+d[i]+q)/10;}elseq=0;}if(y[t]>0)t=t+1;for(i=t-1;i>=0;i--)printf("%d",y[i]);/**************************************/while(x[p-1]==0)//deal the 0 behind of xiaoshu{if(x[p-1]==0)p=p-1;}/**************************************/if(p>0)printf(".");for(i=0;i<p;i++)printf("%d",x[i]);printf("\n");}return 0;} 


0 0
原创粉丝点击