蒟蒻一个,请dalao帮忙看看哪里出了错~

P1009 [NOIP1998 普及组] 阶乘之和

MC_OIer @ 2023-09-03 17:46:53

#include<bits/stdc++.h>
using namespace std;
int c[105],s[105],now[105]={0,1},n,lena,lenb;
void cheng(int a[],int b){
    for(int i=104;i>=1;i--)if(a[i]!=0){lena=i;break;}
    for(int i=1;i<=lena;i++){
        c[i]=a[i]*b;
        c[i+1]+=c[i]/10;
        c[i]%=10;
    }
}
void jia(int a[],int b[]){
    for(int i=104;i>=1;i--)if(a[i]!=0){lena=i;break;}
    for(int i=104;i>=1;i--)if(b[i]!=0){lenb=i;break;}
    for(int i=1;i<=lena||i<=lenb;i++){
        c[i]=a[i]+b[i];
        c[i+1]+=c[i]/10;
        c[i]%=10; 
    }
}
int main(){
    int j;
    cin>>n;
    for(int k=1;k<=n;k++){  
        for(int i=1;i<=k;i++){
            cheng(now,i);
            for(j=104;j>=1;j--)if(c[j]!=0)break;
            for(;j>=1;j--)now[j]=c[j];
        }
        jia(s,now);
        for(j=104;j>=1;j--){now[j]=0;if(c[j]!=0)break;}
        for(;j>=1;j--){now[j]=0;s[j]=c[j];c[j]=0;}
        now[1]=1;
    }

    for(j=104;j>=1;j--)if(s[j]!=0)break;
    for(;j>=1;j--)cout<<s[j];
    return 0;
}

by MC_OIer @ 2023-09-03 17:48:41

到3还是对的,到4明明是33却输出23


by MC_OIer @ 2023-09-04 19:23:21

#include<bits/stdc++.h>
using namespace std;
int s[105],now[105]={0,1},n,lena=0,lenb=0;
void cheng(int a[],int b){
    for(int i=104;i>=1;i--)if(a[i]!=0){lena=i;break;}
    int g=0;
    for(int i=1;i<=lena;i++){
        a[i]=a[i]*b+g;
        g=a[i]/10;
        a[i]%=10;
    }
}
void jia(int a[],int b[]){
    for(int i=104;i>=1;i--)if(a[i]!=0){lena=i;break;}
    for(int i=104;i>=1;i--)if(b[i]!=0){lenb=i;break;}
    for(int i=1;i<=lena||i<=lenb;i++){
        a[i]=a[i]+b[i];
        a[i+1]+=a[i]/10;
        a[i]%=10;
    }
}
int main(){
    int j;
    cin>>n;
    for(int k=1;k<=n;k++){
        cheng(now,k);
        jia(s,now);
    } 
    for(j=104;j>=1;j--)if(s[j]!=0)break;
    for(;j>=1;j--)cout<<s[j];
    return 0;
}

我修改过的代码,4变成了13,还是不对。。。。。。


by linboyu123 @ 2023-09-05 22:36:22

我的代码

#include <bits/stdc++.h>
using namespace std;
int a[10005]={1},b[10005]={1},v=1,lb;
int main ()
{
    int n,cnt;
    cin>>n;
    for(int i=2;i<=n;i++)
    {
        v++;
        for(int j=0;j<v;j++)
            a[j]*=i; 
        for(int j=0;j<v;j++)
        {
            a[j+1]+=a[j]/10;
            a[j]%=10;
        }
        for(int j=0;j<=max(v,lb);j++)
        {
            b[j]+=a[j];
            b[j+1]+=b[j]/10;
            b[j]%=10;
        }
        while(a[v])
            v++;
        while(!a[v-1])
            v--;
        while(b[lb])
            lb++;
        while(!b[lb-1])
            lb--;
    }
    while(!b[lb-1])
        lb--;
    for(int i=lb-1;i+1;i--)
        cout<<b[i];
    return 0;
}

|