GuiyuanCo @ 2023-09-15 21:21:13
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
int a[100]={0},b[100]={0};
a[1]=0;
a[0]=1;
b[0]=1;
b[1]=1;
cin>>n;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=i;j++)
{
for (int k=1;k<=b[0];k++)
{
b[k]*=j;
if (b[k]>10)
{
b[k]-=10;
b[k+1]++;
if (k==b[0])
{
b[0]++;
}
}
}
}
a[0]=max(a[0],b[0]);
b[0]=0;
for (int j=1;j<=a[0];j++)
{
a[j]+=b[j];
b[j]=0;
if (a[j]>10)
{
a[j]-=10;
a[j+1]++;
if (j==a[0])
{
a[0]++;
}
}
}
}
for (int i=a[0];i>0;i--)
{
cout<<a[i];
}
}
by sjr3065335594 @ 2023-09-15 22:20:29
在做乘法的时候先把每一位都计算出来再统一处理进位,不要边乘边进位
by sjr3065335594 @ 2023-09-15 22:22:22
而且乘法一次可能不止进一位
by sjr3065335594 @ 2023-09-15 22:27:45
还有你每次i循环会把b都变成0但实际上b[0]和 b[1] 应该是1
by sjr3065335594 @ 2023-09-15 22:28:18
进位的条件是大于等于10而不是大于10
by sjr3065335594 @ 2023-09-15 22:33:22
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
int a[100]={0},b[100]={0};
a[1]=0;
a[0]=1;
b[0]=1;
b[1]=1;
cin>>n;
for (int i=1;i<=n;i++)
{
b[1]=b[0]=1;
for (int j=1;j<=i;j++)
{
for (int k=1;k<=b[0];k++)
{
b[k]*=j;
}
for (int k=1;k<=b[0];k++)
{
if (b[k]>=10)
{
b[k+1]+=b[k]/10;
b[k]%=10;
if (k==b[0])
{
b[0]++;
}
}
}
}
a[0]=max(a[0],b[0]);
b[0]=0;
for (int j=1;j<=a[0];j++)
{
a[j]+=b[j];
b[j]=0;
if (a[j]>=10)
{
a[j+1]+=a[j]/10;
a[j]%=10;
if (j==a[0])
{
a[0]++;
}
}
}
}
for (int i=a[0];i>=1;i--)
{
cout<<a[i];
}
}
by GuiyuanCo @ 2023-09-16 07:07:14
@sjr3065335594 好的谢谢