题目链接(POJ):http://poj.org/problem?id=1503
题目链接(HDOJ):http://acm.hdu.edu.cn/showproblem.php?pid=1047
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 30856 | Accepted: 12007 |
Description
Input
Output
Sample Input
123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 0
Sample Output
370370367037037036703703703670
Source
题意:求n个大数之和
题解; 大数加法模板题——POJ和HDU上格式出处的要求稍有不同——HDOJ上的描述好混乱。
AC代码(POJ)
#include<iostream> #include<cstring> #include<string> #define maxn 300 using namespace std; int numx[maxn],numy[maxn],n; string str,tmp; string Add(string x,string y){ string res=""; memset(numx,0,sizeof(numx)); memset(numy,0,sizeof(numy)); int lenx=x.size(),leny=y.size(); int maxlen=lenx>leny ? lenx:leny; for(int i=0;i<lenx;i++)numx[lenx-i-1]=x[i]-'0'; for(int i=0;i<leny;i++)numy[leny-i-1]=y[i]-'0'; for(int i=0;i<=maxlen;i++){ numx[i]+=numy[i]; if(numx[i]>9){ numx[i+1]+=numx[i]/10; numx[i]%=10; } } int i=maxlen+2; for(;i>0&&!numx[i];)i--; for(;i>=0;i--)res+=numx[i]+'0'; return res; } int main() { string sum="0"; while(cin>>str&&str!="0") sum=Add(sum,str); cout<<sum<<endl; return 0; }
AC代码(HDU):
#include<iostream> #include<cstring> #include<string> #define maxn 300 using namespace std; int numx[maxn],numy[maxn],n; string str,tmp; string Add(string x,string y){ string res=""; memset(numx,0,sizeof(numx)); memset(numy,0,sizeof(numy)); int lenx=x.size(),leny=y.size(); int maxlen=lenx>leny ? lenx:leny; for(int i=0;i<lenx;i++)numx[lenx-i-1]=x[i]-'0'; for(int i=0;i<leny;i++)numy[leny-i-1]=y[i]-'0'; for(int i=0;i<=maxlen;i++){ numx[i]+=numy[i]; if(numx[i]>9){ numx[i+1]+=numx[i]/10; numx[i]%=10; } } int i=maxlen+2; for(;i>0&&!numx[i];)i--; for(;i>=0;i--)res+=numx[i]+'0'; return res; } int main() { while(cin>>n){ while(n--){ string sum="0"; while(cin>>str&&str!="0"){ sum=Add(sum,str); } cout<<sum<<endl; if(n)cout<<endl; } } return 0; }
【转载请注明出处】
作者:MummyDing
出处:http://blog.csdn.net/mummyding/article/details/43567439