0分求助

P1591 阶乘数码

chenqimeng @ 2022-09-25 16:17:34

我问问我哪错了。

看着没问题啊。

#include<bits/stdc++.h>
#define int long long
using namespace std;

signed main(){
    int n;
    cin>>n;
    for(int sd=1;sd<=n;sd++){
        int ans[10000]={0},ls[10000]={0};
        int s,a,l=1,d=0;
        cin>>s>>a;
        ans[1]=1;
        for(int i=2;i<=s;i++){
            int p=false;
            for(int j=1;j<=l;j++){
                ls[j]+=ans[j]*i;
                if(ls[j]>=10){
                    if(j==l)p=true;
                    ls[j+1]+=ls[j]/10;
                    ls[j]%=10;
                }
            }
            if(p==true)l++;
            for(int j=1;j<=l;j++){
                ans[j]=ls[j];
                ls[j]=0;
            }
            for(int j=l;j>=1;j--)cout<<ans[j];
            cout<<endl;
        }
        for(int i=1;i<=l;i++)if(ans[i]==a)d++;
        cout<<d<<endl;
    } 
}

by qwq666666 @ 2022-09-25 16:21:54

你会不会把测试的语句注释掉

#include<bits/stdc++.h>
#define int long long
using namespace std;

signed main(){
    int n;
    cin>>n;
    for(int sd=1;sd<=n;sd++){
        int ans[10000]={0},ls[10000]={0};
        int s,a,l=1,d=0;
        cin>>s>>a;
        ans[1]=1;
        for(int i=2;i<=s;i++){
            int p=false;
            for(int j=1;j<=l;j++){
                ls[j]+=ans[j]*i;
                if(ls[j]>=10){
                    if(j==l)p=true;
                    ls[j+1]+=ls[j]/10;
                    ls[j]%=10;
                }
            }
            if(p==true)l++;
            for(int j=1;j<=l;j++){
                ans[j]=ls[j];
                ls[j]=0;
            }
            //for(int j=l;j>=1;j--)cout<<ans[j];
            //cout<<endl;
        }
        for(int i=1;i<=l;i++)if(ans[i]==a)d++;
        cout<<d<<endl;
    } 
}

这条评论的验证码是cnm2

qwq


by chenqimeng @ 2022-09-25 16:44:56

谢谢了


by chenqimeng @ 2022-09-25 16:47:48

但还是错的


by Greenzhe @ 2022-09-27 21:30:27

@chenimeng 帮您调好了,错误原因是因为乘法时进位可能大于 1 甚至有多位

#include<bits/stdc++.h>
//#define int long long
using namespace std;

signed main(){
    int n;
    cin>>n;
    for(int sd=1;sd<=n;sd++){
        int ans[10000]={0},ls[10000]={0};
        int s,a,l=1,d=0;
        cin>>s>>a;
        ans[1]=1;
        for(int i=2;i<=s;i++){
//            int p=false;
                        int p=0;
            for(int j=1;j<=l;j++){
//                ls[j]+=ans[j]*i;
                                ls[j]=ans[j]*i+p;
                if(ls[j]>=10){
//                    if(j==l)p=true;
//                    ls[j+1]+=ls[j]/10;
                                        p=ls[j]/10;
                    ls[j]%=10;
                }
                else p=0;
            }
//            if(p==true)l++;
                        while(p>0){
                            l++;
                            ls[l]=p%10;
                            p/=10;
                        }
            for(int j=1;j<=l;j++){
                ans[j]=ls[j];
                ls[j]=0;
            }
//            for(int j=l;j>=1;j--)cout<<ans[j];
//            cout<<endl;
        }
        for(int i=1;i<=l;i++)if(ans[i]==a)d++;
        cout<<d<<endl;
    } 
}

另外建议用模块化编程,即将部分功能打包进函数里,说实话您的代码真的有点乱qwq


by Greenzhe @ 2022-09-27 21:30:45

@chenqimeng


|