wa声一片 求调

P1591 阶乘数码

why1481211 @ 2023-07-19 09:29:53

#include<bits/stdc++.h>
using namespace std;
int t,a,n,len;
int ans[3010],jinwei,weishu=3010;
long long total;
bool flag;
int main(){
    cin >>t;

    while(t--)//多测要清空 
    {
        memset(ans,0,sizeof(ans));
        ans[1]=1;
        cin >> n >>a;
        for(int i=2; i<=n; ++i){
            //实现ans[j]*i
            weishu=3010;
            for(int j=1; j<=weishu; ++j){//因为无法得知得数的位数 开到最大 后面去除0就可以了 
                if(ans[j]==0) continue;
                ans[j]=ans[j]*i;
            }
            //考虑进位 
            for(int i=1; i<=weishu+1; ++i){
                if(ans[i]>9)
                {
                    ans[i+1]+=ans[i]/10;
                    ans[i]%=10;
                }
            }
            //去除零
            while(ans[weishu]==0 && weishu>1) {
                weishu--;
            }
        }
        for(int i=weishu; i>=1; --i){//搜索 
            if(ans[i]==a){
                total++;
            }
        } 
        cout << total << endl;
    }
    return 0;
}

by freegt @ 2023-07-20 16:24:15

问题1:这个循环的循环变量i和他的外层循环变量i重了

for(int i=1; i<=weishu+1; ++i){
                if(ans[i]>9)
                {
                    ans[i+1]+=ans[i]/10;
                    ans[i]%=10;
                }
            }

问题2:下面这个循环变量i也重了

for(int i=weishu; i>=1; --i){//搜索 
            if(ans[i]==a){
                total++;
            }
        } 

问题3:total没有重置清零


|