大数加法
发布时间:2020-12-14 04:04:50 所属栏目:大数据 来源:网络整理
导读:描述 给定任意位数长度的两个数,求它们数值之和。 输入 每个测试用例含有两个数,代表两个任意位数长度的数A,B. 输出 计算出这两个任意位数长度的数之和。 样例输入 123451234512345?? 543215432154321 12.345??? 54.321 样例输出 666666666666666 66.666
描述 给定任意位数长度的两个数,求它们数值之和。 输入
每个测试用例含有两个数,代表两个任意位数长度的数A,B. 输出 计算出这两个任意位数长度的数之和。 样例输入
123451234512345?? 543215432154321
12.345??? 54.321 样例输出
666666666666666
66.666 #include<iostream> #include<cstring> #define MIX 5000 #define M 4999 using namespace std; int main() { int a[MIX],b[MIX],c[MIX],d[MIX]; char s1[MIX],s2[MIX]; while(cin>>s1>>s2) { if((strlen(s1)==1)&&(strlen(s2)==1)&&(s1[0]=='0')&&(s2[0]=='0')){cout<<0<<endl;continue;} int i,j,k,l,flag=1; memset(a,sizeof(a));memset(b,sizeof(b)); memset(c,sizeof(c));memset(d,sizeof(d));//初始化为零 l=strlen(s1); for(i=0;i<l;i++) if(s1[i]=='.')break; k=0; for(j=i-1;j>=0;j--)//用a数组存放小数点前面的数 a[k++]=s1[j]-'0'; j=0; b[j++]=0; if(i<l-1) //判断小数点后面是否有数,如果成立,则把小数点后面的数放入b数组 { for(k=i+1;s1[k];k++) b[j++]=s1[k]-'0'; } l=strlen(s2); for(i=0;s2[i];i++) if(s2[i]=='.')break; k=0; for(j=i-1;j>=0;j--)//同上a数组 c[k++]=s2[j]-'0'; k=0; d[k++]=0; if(i<l-1)//同上b数组 { for(j=i+1;s2[j];j++) d[k++]=s2[j]-'0'; } i=M; for(j=0;j<i;j++) { a[j]=a[j]+c[j]; if(a[j]>9)a[j+1]+=a[j]/10; a[j]=a[j]%10; } for(j=M;j>=1;j--) { b[j]=b[j]+d[j]; if(b[j]>9)b[j-1]+=(b[j]/10); b[j]=b[j]%10; } a[0]+=b[0]; i=M; for(j=0;j<i;j++) { if(a[j]>9)a[j+1]+=a[j]/10; a[j]=a[j]%10; } i=M; while(a[i]==0&&i>=0)i--; while(i>=0) { cout<<a[i]; i--; } i=M; while(b[i]==0&&i>0)i--; if(i==0) cout<<endl; else { cout<<"."; j=1; while(j<=i) { cout<<b[j]; j++; } cout<<endl; } } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |