A+B Problem IV

来源:互联网 发布:信浓藤四郎极化数据 编辑:程序博客网 时间:2024/05/08 21:04

大数问题:

描述
acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这个问题给解决了。
输入
包含多组测试数据
每组数据包含两个正数A,B(可能为小数且位数不大于400)
输出
每组输出数据占一行,输出A+B的结果,结果需要是最简的形式。
样例输入
1.9 0.1
0.1 0.9
1.23 2.1
3 4.0
样例输出
2
1
3.33
7
来源
hdu
上传者
路过这

代码:

#include <iostream>#include <iomanip>#include <cstring>#include <algorithm>#include <string>using namespace std;char ch[405],ch1[405];int A1[805],A2[805],B1[805],B2[805],p,q;void get() {memset(A1,0,sizeof(A1));memset(A2,0,sizeof(A2));memset(B1,0,sizeof(B1));memset(B2,0,sizeof(B2));int i,j,k;k=strlen(ch);for(i=0;i<p;i++)A1[i]=ch[p-i-1]-'0';if(p<k){for(i=p+1;i<k;i++)A2[i-p-1]=ch[i]-'0';}k=strlen(ch1);for(i=0;i<q;i++)B1[i]=ch1[q-i-1]-'0';if(q<k){for(i=q+1;i<k;i++)B2[i-q-1]=ch1[i]-'0';}}void sum(){int i,j,k;get();k=0;for(i=400;i>=0;i--){A2[i]+=B2[i]+k;k=A2[i]/10;A2[i]=A2[i]%10;}j=400;for(i=0;i<j;i++){A1[i]+=B1[i]+k;k=A1[i]/10;    if(A1[j-1]>9)j++;    A1[i]=A1[i]%10;}for(i=j;i>=0;i--)if(A1[i]!=0) break;if(i<0) cout<<"0";for(j=i;j>=0;j--)cout<<A1[j]; for(i=400;i>=0;i--)if(A2[i]!=0) break;if(i>=0){cout<<".";for(j=0;j<=i;j++)cout<<A2[j];    }     cout<<endl;}int main(){int n,m,i,j,k;while(cin>>ch>>ch1){p=strlen(ch);for(i=0;i<p;i++)if(ch[i]=='.') p=i;q=strlen(ch1);for(i=0;i<q;i++)if(ch1[i]=='.') q=i;sum();}return 0;}



0 0
原创粉丝点击