70求助 错了#1#2#3

P1591 阶乘数码

propitious @ 2024-02-04 00:47:03

#include<bits/stdc++.h>
using namespace std;
int n,b[100005],c[15],t,a,k,m=0;
int main()
{
    cin>>n;
    memset(c,0,sizeof(c));
    for(int i=1;i<=n;i++)
    {
        memset(b,0,sizeof(b));
        b[1]=1;
        cin>>t>>a;
        for(int j=1;j<=t;j++)
        {
            for(k=1;k<100000;k++)
                b[k]*=j;
            for(k=1;k<100000;k++)
            if(b[k]>=10){
                b[k+1]+=b[k]/10;
                b[k]%=10;
                m=max(m,k+1);
            }
        }
        for(int j=1;j<=m;j++)
            if(b[j]==a) c[i]++;
    }
    for(int i=1;i<=n;i++)
    cout<<c[i]<<endl;
}

by xxx听取AC声一片 @ 2024-02-04 08:00:37

@propitious

for(k=1;k<100000;k++)
    if(b[k]>=10)
   {
        b[k+1]+=b[k]/10;
        b[k]%=10;
        m=max(m,k+1);
    }

你只有在进位时才统计阶乘的长度,如果没进位m就是0,就判断不出来

hack数据

3
1 1
2 2
3 6

输出为1 1 1

但你的代码输出0 0 0


by propitious @ 2024-02-04 11:57:48

@xxx听取AC声一片 最开始定义那里m改成1,还是70分


by xxx听取AC声一片 @ 2024-02-04 14:41:31

@propitious 你在循环里面就应该不断统计阶乘的长度,不管有没有进位


by propitious @ 2024-02-04 16:31:12

@xxx听取AC声一片 统计了呀,这里m就是,并且每次取m和k+1中较大者作为全数组长度


by xxx听取AC声一片 @ 2024-02-05 14:30:56

@propitious 你前面有个if,也就是数组进位是才统计,你要在if外循环内统计


by propitious @ 2024-02-05 15:02:23

@xxx听取AC声一片 不满足if也没必要更新位数吧,说明还不如原来的长


by xxx听取AC声一片 @ 2024-02-07 19:41:23

@propitious 你的k一直在++,怎么会不如原来的长?


by zhaozichu @ 2024-02-16 22:55:43

你m没有初始化


by zhaozichu @ 2024-02-16 22:56:30

每一次循环要初始化


|