记录编号 295742 评测结果 AAAAAAAAAA
题目名称 超强的乘法问题 最终得分 100
用户昵称 Gravatar安呐一条小咸鱼。 是否通过 通过
代码语言 C++ 运行时间 5.125 s
提交时间 2016-08-14 14:56:27 内存使用 2.91 MiB
显示代码纯文本
#include <cstdio>
#include <iostream>
#include <cstring>
 
using namespace std;
 
#define yy 1000000000
#define int64 unsigned long long
 
char s1[151010],s2[151010];
int64 A[101010]={0};
int64 B[101010]={0};
int64 C[101010]={0},tmp;
int lena,lenb,npos,st;
 
inline void work()
{
	for(int k=0;k<=lena+lenb;++k)
	{
		for(int i=0;i<=lena && i<=k;i+=15)
		{
			for(int j=0;j<=14;j++)
			{
				C[k]+=A[i+j]*B[k-i-j];
			}
 
			if(C[k]>yy)
			{
				C[k+1]+=C[k]/yy;
				C[k]%=yy;
			}
		}
	}
}
 
inline void print()
{
	st=lena+lenb+1;
	
	if(!C[st]) st--;
	
	printf("%lld",C[st]);
	
	for(int i=st-1;i>=0;i--)
	{
		printf("%09lld",C[i]);
	}
}
 
inline void solve()
{
	for(int i=npos;i>=0;--i)
	{
		if((npos-i)%9==0)
		{
			lena++;
			tmp=1;
		}
		
		A[lena]+=(s1[i]-'0')*tmp;
		tmp*=10;
	}
	
	npos=strlen(s2)-1;
	
	for(int i=npos;i>=0;i--)
	{
		if((npos-i)%9==0)
		{
			lenb++;
			tmp=1;
		}
		
		B[lenb]+=(s2[i]-'0')*tmp;
		tmp*=10;
	}
}
 
inline void init()
{
	freopen("bettermul.in","r",stdin);
	freopen("bettermul.out","w",stdout);
	
	scanf("%s\n%s",s1,s2);
	
	lena=lenb=-1;
	npos=strlen(s1)-1;
}
 
int main()
{
	init();
	solve();
	work();
	print();
	
	return 0;
}