w1141919 @ 2024-07-29 22:27:56
#include<iostream>
using namespace std;
int a[50000]={0},n,cnt=0,l=1,t,nn;
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n;
cin>>nn;
a[0]=1;
for(int j=1;j<=n;j++){
int x=0;
for(int y=0;y<=l;y++){
a[y]=a[y]*j+x;
x=a[y]/10;
a[y]%=10;
}
while(x!=0){
l++;
a[l]=x%10;
x/=10;
}
}
for(int j=l;j>=0;j--){
if(a[j]!=0||j==0){
for(int y=j;y>=0;y--){
if(a[y]==nn){
cnt++;
}break;
}
}
}
cout<<cnt<<endl;
}
}
by 虫二bug2 @ 2024-08-19 20:47:04
统计出现次数不用那么麻烦,l的处理是主要问题
by 虫二bug2 @ 2024-08-19 20:48:12
@w1141919 改过的
#include<iostream>
using namespace std;
int a[3001]={0},n,cnt,l,t,nn;
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n;
cin>>nn;
a[0]=1;
cnt=0;
l=0;//每一次重新从1算起,l要清零
//数组下标从0开始,l应设为0
for(int j=1;j<=n;j++){
int x=0;
for(int y=0;y<=l;y++){
a[y]=a[y]*j+x;
x=a[y]/10;
a[y]%=10;
}
while(x!=0){
l++;
a[l]=x%10;
x/=10;
}
}
for(int j=l;j>=0;j--){
if(a[j]==nn)cnt++;
}
cout<<cnt<<endl;
}
}