压位高精加

解决位数过长时的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;
}


猜你喜欢

转载自blog.csdn.net/ACerAndAKer/article/details/80909185