描述
给定任意位数长度的两个数,求它们数值之和。
输入
每个测试用例含有两个数,代表两个任意位数长度的数A,B.
计算出这两个任意位数长度的数之和。
样例输入
123451234512345 543215432154321
12.345 54.321
12.345 54.321
样例输出
666666666666666
66.666
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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。