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
每一次循环要初始化