题目描述
题目大意
n
n
个数相乘,求积
解题思路
这道题描述有毒。。。
10241024写成了1024,搞得我打了一个30分的高精乘单精。。。
30分代码
#include<cstdio>
#define mod 100000000
#define M 400
using namespace std;
long long ans[M+
1],x;
int n,j;
void mul(
long long x)
{
long long g=
0;
for(
int j=M;j>
0;j--)
{
long long d=ans[j]*x+g;
ans[j]=d%mod;
g=d/mod;
}
return;
}
int main()
{
scanf(
"%d",&n);
ans[M]=
1;
while(n--)
scanf(
"%lld",&x),mul(x);
for(j=
1;!ans[j];j++);
printf(
"%lld",ans[j]);
for(
int i=j+
1;i<=M;i++)
{
if(ans[i]<
1e7)
putchar(
48);
if(ans[i]<
1e6)
putchar(
48);
if(ans[i]<
1e5)
putchar(
48);
if(ans[i]<
1e4)
putchar(
48);
if(ans[i]<
1e3)
putchar(
48);
if(ans[i]<
1e2)
putchar(
48);
if(ans[i]<
1e1)
putchar(
48);
printf(
"%lld",ans[i]);
}
}
100分代码
#include<cstdio>
#include<cstring>
#define M 2501
using namespace std;
int ans[M+
1],x,b[
51],c[M+
1];
char yc[
51];
int n,j;
void mul()
{
int len;
for(len=M;!ans[len];len--);
for(
int i=
1;i<=M;i++) {c[i]=ans[i];ans[i]=
0;}
int m=
strlen(yc);
for(
int i=
0;i<m;i++) b[m-i]=yc[i]-
48;
for(
int i=
1;i<=len;i++)
{
int g=
0;
for (j=
1;j<=m;j++)
{
ans[i+j-
1]=c[i]*b[j]+g+ans[i+j-
1];
g=ans[i+j-
1]/
10;
ans[i+j-
1]%=
10;
}
ans[i+m]=g;
}
return;
}
int main()
{
scanf(
"%d",&n); ans[
1]=
1;
while(n--)
{
scanf(
"%s",yc);
mul();
}
for(j=M;!ans[j]&&j>
1;j--);
for(
int i=j;i>
0;i--)
putchar(ans[i]+
48);
}