hema5177 @ 2022-04-17 10:41:18
#include<iostream>
#include<cstring>
using namespace std;
int x[100001],b,t,a;
int main()
{
cin>>t;
while(t--)
{
cin>>a>>b;
memset(x,0,sizeof(x));
x[1]=1;
int d=0,q=1;
for(int i=2;i<=a;i++)
{
d=0;
for(int j=1;j<=q;j++)
{
x[j]=x[j]*i+d;
d=x[j]/10;
x[j]%=10;
}
while(d>0)
{
x[q]=d%10;
d/=10;
q++;
}
q--;
}
long long sum=0;
for(int i=q;i>=1;i--)
{
if(x[i]==b) sum++;
}
cout<<sum<<endl;
}
}
by _maojun_ @ 2022-04-17 12:45:59
你把q--放到for外面试试。
for(int i=2;i<=a;i++)
{
d=0;
for(int j=1;j<=q;j++)
{
x[j]=x[j]*i+d;
d=x[j]/10;
x[j]%=10;
}
while(d>0)
{
x[q]=d%10;
d/=10;
q++;
}
}
q--;
不然每次的第一个x[q]都会覆盖上次的最后一个。
by hema5177 @ 2022-04-17 13:36:42
@maojun 成0 1 了
by hema5177 @ 2022-04-17 15:07:00
找到问题了,原来要先让q++,然后再算进位,不用q--
by _maojun_ @ 2022-04-17 17:54:53
嗯……