P1009 为什么本机可过测试点,洛谷只有25分

P1009 [NOIP1998 普及组] 阶乘之和

KoroCapsaNt @ 2024-11-14 21:37:19

只能拿到第一个测试点的分,第二个测试点本机结果与答案一样,代入其他的n本机结果和计算器一样

#include <bits/stdc++.h>
using namespace std;
int a[5],b[505],b1[505],c[505];
int n,p,pc=1,co=1;
int num(){         //获取阶乘长度
    int re;
    for(int k=1;k<=100;k++){
        if(b1[k]!=0)re=k;
    }
    return re;
}
int main(){
    cin>>n; 
    b[1]=1;
    for(int i=1;i<=n;i++){
        a[0]=i%10;
        a[1]=i/10;
        for(int j=0;j<=1;j++){
            for(p=1;p<=pc;p++){    //计算第i个阶乘
                b1[p+j]+=b[p]*a[j];
                b1[p+j+1]+=b1[p+j]/10;
                b1[p+j]%=10;
            }
            pc=num();
        }
        for(int j=1;j<=pc;j++){  //计算前i个和
            c[j]+=b1[j];
            c[j+1]+=c[j]/10;
            c[j]%=10;   
        }
        for(int j=1;j<=pc;j++){  //保存第i个阶乘
            b[j]=b1[j];
            b1[j]=0;
        }
    }
    bool signal=0;
    for(int i=pc;i>=1;i--){
        if(c[i]==0&&!signal){    //除0
            continue;
        }
        cout<<c[i];
        signal=1;
    }
    return 0;
}

by caizihang @ 2025-01-04 09:50:22

孩子,要用高精度!


|