请问各位大佬为什么这样写不行

P1009 [NOIP1998 普及组] 阶乘之和

Cartier @ 2022-12-29 20:47:27


#include<bits/stdc++.h>
using namespace std;
int main(){
    int n=0;
    cin>>n;
    int A[100]={0};
    int B[100]={0};
    A[0]=1;
    B[0]=1;
    if(n==1){
        cout<<"1"<<endl;
        return 0;
    }
    else{
        for(int i=2;i<=n;i++){
            for(int j=0;j<100;j++){
                A[j]*=i;
            }
            for(int k=0;k<100;k++){
                if(A[k]>=10){
                    A[k+1]=A[k+1]+A[k]/10;
                    A[k]%=10;
                }
                B[k]=B[k]+A[k];
                if(B[k]>=10){
                    B[k+1]+=B[k+1]+1;
                    B[k]=B[k]-10;
                }

            }
        }
    }
    int p=99;
    while(B[p]==0){
        p--;
    }
    while(p>=0){
        cout<<B[p];
        p--;
    }
    return 0;
}

by Cartier @ 2022-12-29 20:48:00

我试了几个数好像可以啊


by ZQIN_P @ 2022-12-29 21:00:46

@Cartier 您把50扔进去试下


by xiaoqian02 @ 2022-12-29 21:06:15

for(int i=2;i<=n;i++){
   for(int j=0;j<100;j++){
      A[j]*=i;
      }

请考虑一下 a[0] 会不会炸的问题。所以你需要一边乘一边进位,否则高精也就没有意义了。


|