Jason_Yvan @ 2016-10-05 21:53:23
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct number{
int x[1000];
int len;
number(int a=0){
if(a==0){
memset(x,0,sizeof(x));
len=0;
}
if(a==1){
x[0]=1;
len=1;
}
}
number operator * (number a){
number res;
res.len=len+a.len-1;
for(int i=0;i<len;i++){
for(int j=0;j<a.len;j++){
res.x[i+j]+=x[i]*a.x[j];
res.x[i+j+1]+=res.x[i+j]/10;
res.x[i+j]%=10;
}
}
while(res.x[res.len]){
res.x[res.len+1]+=res.x[res.len]/10;
res.x[res.len]%=10;
++res.len;
}
return res;
}
number operator * (int b){
number res;
res.len=len;
for(int i=0;i<res.len;i++){
res.x[i]+=x[i]*b;
res.x[i+1]+=res.x[i]/10;
res.x[i]%=10;
}
while(res.x[res.len]){
res.x[res.len+1]+=res.x[res.len]/10;
res.x[res.len]%=10;
++res.len;
}
return res;
}
number operator +(number a){
number res;
res.len=max(len,a.len);
for(int i=0;i<res.len;i++){
res.x[i]+=a.x[i]+x[i];
res.x[i+1]+=res.x[i]/10;
res.x[i]%=10;
}
while(res.x[res.len]){
res.x[res.len+1]+=res.x[res.len]/10;
res.x[res.len]%=10;
++res.len;
}
return res;
}
};
number get(int n){
number ans=1;
for(int i=2;i<=n;i++)
ans=ans*i;
return ans;
}
int main(){
int i,j,k,m,n,a;
int T;
scanf("%d",&T);
while(T--){
number m;
int ans1=0;
scanf("%d%d",&n,&a);
m=get(n);
int k=m.len;
for(i=k-1;i>=0;i--)
if(m.x[i]==a)ans1++;
printf("%d\n",ans1);
}
return 0;
}
by Jason_Yvan @ 2016-10-06 20:09:41
数组开小了