解决位数过长时的TLE问题
代码
//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define p 8
#define up 100000000
using namespace std;
const int M=50001;
char s1[M],s2[M];
int a[M],b[M],ans[M];
int push(char s[],int n[])
{
char tmp[M];
int len=strlen(s+1),cnt=0;
while (len/p)//看能不能继续get
{
strncpy(tmp,s+len-p+1,p);//取出后面p位
n[++cnt]=atoi(tmp);
len-=p;
}
if (len)
{
memset(tmp,0,sizeof(tmp));
strncpy(tmp,s+1,len);
n[++cnt]=atoi(tmp);
}
return cnt;
}//压位
int add(int a[],int b[],int c[],int l3)
{
int x=0;
for (int i=1;i<=l3;i++)
{
c[i]=a[i]+b[i]+x;
x=c[i]/up;c[i]%=up;
}
while (x>0) c[++l3]=x%10,x/=10;
return l3;
}
int main()
{
scanf("%s%s",s1+1,s2+1);
int la=push(s1,a);
int lb=push(s2,b);
int len=add(a,b,ans,max(la,lb));
printf("%d",ans[len]);len--;
for (int i=len;i>0;i--) printf("%0*d",p,ans[i]);
return 0;
}