请大佬帮忙看一下1009这题哪里错了
  • 板块灌水区
  • 楼主534216cc
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/5/2 23:17
  • 上次更新2023/10/28 02:21:24
查看原帖
请大佬帮忙看一下1009这题哪里错了
699457
534216cc楼主2022/5/2 23:17
#include<bits/stdc++.h>
using namespace std;
int n;
int a[90],b[90],c[90],f[90];
int len_a,len_b=1,len_c=1,len_ans,m=1;
int main()
{
    cin>>n;
    b[0]=1;
    for(int i=1;i<=n;i++)
    {
        len_a=0;
        int p=i;
        while(p>0)
        {
            a[len_a++]=p%10;
            p=p/10;
        }
        //存数
        
        for(int j=0;j<len_a;j++)
            for(int k=0;k<=len_b;k++)
                c[j+k]=c[j+k]+a[j]*b[k];
        for(int j=0;j<len_c;j++)
            if(c[j]>9)
            {
                c[j+1]=c[j]/10;
                c[j]=c[j]%10;
            }
        if(c[len_c])    len_c++;
        //阶乘运算
        
        len_ans=len_b;len_b=len_c;m=max(m,len_c);
        for(int j=len_c-1;j>=0;j--)
            b[j]=c[j];
        len_c=len_ans+len_a;
        memset(c,0,sizeof(c));
        //b,c交换
        
        for(int k=0;k<m;k++)
        {
            f[k]+=b[k];
            if(f[k]>9)
            {
                f[k+1]+=f[k]/10;
                f[k]=f[k]%10;
            }
        }
        //高精度加法
        
    }
    while(!f[m]&&m>0)
    {
        m--;
    }
    for(int i=m;i>=0;i--)
        cout<<f[i];
    return 0;
}
2022/5/2 23:17
加载中...