info___tion @ 2018-06-19 15:12:03
这是一个假的模板(我在做P1009 阶乘之和时发现这个模板有问题)
#include<stdio.h>
#include<string.h>
using namespace std;
const int maxl=4002;
struct node
{
int len;
int num[maxl];
void Read(char *s)
{
len=strlen(s);
for(int i=1;i<=len;i++)
num[i]=s[len-i]-'0';
return;
}
void Init()
{
len=0;
memset(num,0,sizeof(num));
return;
}
void print()
{
if(!len)
{
putchar('0');
return;
}
for(int i=len;i>=1;i--)
putchar(num[i]+'0');
return;
}
}A,B;
void mod(int& x)
{
x%=10;
return;
}
node mul(node x,node y)
{
node ret;
ret.Init();
int len=x.len+y.len-1;
for(int i=1;i<=x.len;i++)
for(int j=1;j<=y.len;j++)
{
int tmp=x.num[i]*y.num[j];
int pos=i+j-1;
ret.num[pos]+=tmp;
int over=ret.num[pos]/10;
mod(ret.num[pos]);
ret.num[pos+1]+=over;
}
while(!ret.num[len]&&len>1) len--;
ret.len=len;
return ret;
}
int main()
{
char ca[maxl],cb[maxl];
scanf("%s%s",&ca,&cb);
A.Read(ca);
B.Read(cb);
node ans=mul(A,B);
ans.print();
return 0;
}
然而用这个假模板交到这一题上面就
by info___tion @ 2018-06-19 15:13:40
这个模板才是真的:
#include<stdio.h>
#include<string.h>
using namespace std;
const int maxl=4002;
struct node
{
int len;
int num[maxl];
void Read(char *s)
{
len=strlen(s);
for(int i=1;i<=len;i++)
num[i]=s[len-i]-'0';
return;
}
void Init()
{
len=0;
memset(num,0,sizeof(num));
return;
}
void print()
{
if(!len)
{
putchar('0');
return;
}
for(int i=len;i>=1;i--)
putchar(num[i]+'0');
return;
}
}A,B;
void mod(int& x)
{
x%=10;
return;
}
node mul(node x,node y)
{
node ret;
ret.Init();
int len=x.len+y.len;
for(int i=1;i<=x.len;i++)
for(int j=1;j<=y.len;j++)
{
int tmp=x.num[i]*y.num[j];
int pos=i+j-1;
ret.num[pos]+=tmp;
int over=ret.num[pos]/10;
mod(ret.num[pos]);
ret.num[pos+1]+=over;
}
while(!ret.num[len]&&len>1) len--;
ret.len=len;
return ret;
}
int main()
{
char ca[maxl],cb[maxl];
scanf("%s%s",&ca,&cb);
A.Read(ca);
B.Read(cb);
node ans=mul(A,B);
ans.print();
return 0;
}
比较一下跟上面的有什么不同