l_615 @ 2023-07-11 18:05:46
我找不到问题在哪qwq
#include<bits/stdc++.h>
using namespace std;
int a[100],b[100],c[100],sum[100];
void cheng(int n)
{
int x;
memset(c,0,sizeof(c));
c[1]=1;
for(int k=2;k<=n;k++)
{
for(int j=1;j<=100;j++)
{
a[j]=c[j];
}
x=k;
/*
int t;
for(int i=100;i>=1;i--)
{
if(a[i]!=0)
{
t=i;
break;
}
}
for(int i=t;i>=1;i--)
{
printf("%d",a[i]);
}printf("\n");
*/
for(int j=1;x>0;j++)
{
b[j]=x%10;
x/=10;
}
for(int i=1;i<=100;i++)
{
for(int j=1;j<=100;j++)
{
c[j]=a[j]*b[i]+c[j];
}
}
for(int i=1;i<=100;i++)
{
if(c[i]>=10)
{
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
}
}
}
}
void jia()
{
for(int i=1;i<=100;i++)
{
sum[i]=sum[i]+c[i];
if(sum[i]>9)
{
sum[i+1]=sum[i+1]+sum[i]/10;
sum[i]=sum[i]%10;
}
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cheng(i);
jia();
}
int t;
for(int i=100;i>=1;i--)
{
if(sum[i]!=0)
{
t=i;
break;
}
}
for(int i=t;i>=1;i--)
{
printf("%d",sum[i]);
}
}
有没有大佬来帮我看一下哪出了问题
by wYYSZLwSSY @ 2023-07-11 18:39:13
@110001101liuyiran 首先你数组越界了
by wYYSZLwSSY @ 2023-07-11 18:44:03
这段代码
for(int i=1;i<=100;i++)
{
for(int j=1;j<=100;j++)
{
c[j]=a[j]*b[i]+c[j];
}
}
是有问题的。
by wYYSZLwSSY @ 2023-07-11 18:45:00
事实上,这个题目的 n
不大,你完全可以用低精度乘高精度的方法
by wYYSZLwSSY @ 2023-07-11 18:45:47
大概长这样
#include<bits/stdc++.h>
using namespace std;
int a[1001],b[1001],c[1001],sum[1001];
void cheng(int n)
{
int x;
memset(c,0,sizeof(c));
c[1]=1;
for(int k=2;k<=n;k++)
{
int qw=0;
for(int i=1;i<=1000;i++)
{
c[i]*=k;
c[i]+=qw;
qw=c[i]/10;
c[i]%=10;
}
}
}
void jia()
{
for(int i=1;i<=1000;i++)
{
sum[i]=sum[i]+c[i];
if(sum[i]>9)
{
sum[i+1]=sum[i+1]+sum[i]/10;
sum[i]=sum[i]%10;
}
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cheng(i);
jia();
}
int t;
for(int i=100;i>=1;i--)
{
if(sum[i]!=0)
{
t=i;
break;
}
}
for(int i=t;i>=1;i--)
{
printf("%d",sum[i]);
}
}
by l_615 @ 2023-07-12 10:56:52
谢谢谢谢