记录编号 |
295742 |
评测结果 |
AAAAAAAAAA |
题目名称 |
超强的乘法问题 |
最终得分 |
100 |
用户昵称 |
安呐一条小咸鱼。 |
是否通过 |
通过 |
代码语言 |
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;
}