求助

P1009 [NOIP1998 普及组] 阶乘之和

szlh_XJS @ 2024-07-03 17:59:46

#include<bits/stdc++.h>
using namespace std;
int n,ss,sc;
int s[5000],c[5000];
void jsc(int j)
{
    for(int i=1;i<=j;i++)
    {
        for(int t=1;t<=sc;t++)
        {
            c[t]*=i;
        }
    }
}
void jsj()
{
    for(int i=1;i<=sc;i++)
    {
        s[i]+=c[i];
    }
    ss=max(sc,ss);
    for(int i=1;i<=ss;i++)
    {
        if(s[i]<10)
        {
            continue;
        }
        else
        {
            s[i+1]+=(s[i]/10);
            s[i]/=10;
        }
    }
    for(int i=ss+1;;i++)
    {
        if(s[i]<10)
        {
            ss=i;
            break;
        }
        else
        {
            s[i+1]+=(s[i]/10);
            s[i]/=10;
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        memset(c,0,sizeof(c));
        sc=c[1]=1;
        jsc(i);
        jsj();
    }
    for(int i=ss;i>=1;i--)
    {
        if(s[i]>0)
        {
            ss=i;
            break;
        }
    }
    for(int i=ss;i>=1;i--)
    {
        cout<<s[i];
    }
    return 0;
 } 

0分


by AndyC @ 2024-07-03 18:18:33

@szlh_XJS 你的s数组中有10以上的数字啊


by AndyC @ 2024-07-03 18:19:21

@szlh_XJS 给你个样例 6 你输出 8733 应该是873


by AndyC @ 2024-07-03 18:19:35

@szlh_XJS 求关


by szlh_XJS @ 2024-07-03 18:24:22

#include<bits/stdc++.h>
using namespace std;
int n,ss,sc;
int s[5000],c[5000];
void jsc(int j)
{
    for(int i=1;i<=j;i++)
    {
        for(int t=1;t<=sc;t++)
        {
            c[t]*=i;
        }
    }
}
void jsj()
{
    for(int i=1;i<=sc;i++)
    {
        s[i]+=c[i];
    }
    ss=max(sc,ss);
    for(int i=1;i<=ss;i++)
    {
        if(s[i]<10)
        {
            continue;
        }
        else
        {
            s[i+1]+=(s[i]/10);
            s[i]%=10;
        }
    }
    for(int i=ss+1;i>=1;i++)
    {
        if(s[i]<10)
        {
            ss=i;
            break;
        }
        else
        {
            s[i+1]+=(s[i]/10);
            s[i]%=10;
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        memset(c,0,sizeof(c));
        sc=c[1]=1;
        jsc(i);
        jsj();
    }
    for(int i=ss;i>=1;i--)
    {
        if(s[i]>0)
        {
            ss=i;
            break;
        }
    }
    for(int i=ss;i>=1;i--)
    {
        cout<<s[i];
    }
    return 0;
 } 

now?50分


by liyanrui0013 @ 2024-07-03 21:36:48

n=int(input()) c=0 while n>0: a=n b=1 for i in range(1,a+1): b=i*b c+=b n=n-1 print(c)


by liyanrui0013 @ 2024-07-03 21:39:05

n=int(input())
c=0
while n>0:
    a=n
    b=1
    for i in range(1,a+1):
        b=i*b
    c+=b
    n=n-1
print(c)

这样可以,我是初中生,有误请指教!


|