多种解法 题解 100% AC
2025-08-27 22:27:24
发布于:江苏
15阅读
0回复
0点赞
1. 高精度:
#include<bits/stdc++.h>
using namespace std;
int a[10010],b[10010],c[10010];
string mul(string s1,string s2){
memset(a,0,sizeof(a)),memset(b,0,sizeof(b)),memset(c,0,sizeof(c));
a[0]=s1.size(),b[0]=s2.size();
for(int i=1;i<=a[0];i++)a[i]=s1[a[0]-i]-'0';
for(int i=1;i<=b[0];i++)b[i]=s2[b[0]-i]-'0';
for(int i=1;i<=a[0];i++)for(int j=1;j<=b[0];j++)c[i+j-1]+=a[i]*b[j];
c[0]=a[0]+b[0];
for(int i=1;i<=c[0];i++){
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
while(c[c[0]]==0&&c[0]>1)c[0]--;
string ans;
for(int i=c[0];i>=1;i--)ans+=c[i]+'0';
return ans;
}
int main(){
int n;
cin>>n;
while(n--){
int x,cnt=0;
char s;
string ans="1";
cin>>x>>s;
for(int i=1;i<=x;i++)ans=mul(ans,to_string(i));
for(int i=0;i<ans.size();i++)if(ans[i]==s)cnt++;
cout<<cnt<<endl;
}
return 0;
}
2. 预处理:
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> factorial(1001);
void init_factorials() {
factorial[0] = {1};
factorial[1] = {1};
for(int i = 2; i <= 1000; ++i) {
vector<int> current = factorial[i-1];
int carry = 0;
for(int &digit : current) {
int product = digit * i + carry;
digit = product % 10;
carry = product / 10;
}
while(carry) {
current.push_back(carry % 10);
carry /= 10;
}
factorial[i] = current;
}
}
int count_digit(int n, int target) {
int count = 0;
for(int digit : factorial[n]) {
if(digit == target) {
++count;
}
}
return count;
}
int main() {
init_factorials();
int t;
cin >> t;
while(t--) {
int n, a;
cin >> n >> a;
cout << count_digit(n, a) << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个