洛谷题单指南-模拟和高精度-P1591 阶乘数码

原题链接:https://www.luogu.com.cn/problem/P1591

题意解读:此题核心就是通过高精度*低精度计算阶乘,然后统计数码个数即可,直接给出代码。

100分代码:

#include <bits/stdc++.h>
using namespace std;

vector<int> mul(vector<int> &a, int b)
{
    vector<int> result;
    int t = 0;
    for(int i = 0; i < a.size(); i++)
    {
        t += a[i] * b;
        result.push_back(t % 10);
        t /= 10;
    }
    while(t)
    {
        result.push_back(t % 10);
        t /= 10;
    }

    return result;
}

int fac(int n, int a)
{
    vector<int> ans(1, 1);
    for(int i = 1; i <= n; i++)
    {
        ans = mul(ans, i);
    }

    int cnt = 0;
    for(int i = 0; i < ans.size(); i++)
    {
        if(ans[i] == a) cnt++;
    } 

    return cnt;
}


int main()
{
    int t, n, a;
    cin >> t;

    for(int i = 1; i <= t; i++)
    {
        cin >> n >> a;
        cout << fac(n, a) << endl;
    }
    return 0;
}

 

posted @ 2024-01-24 15:47  五月江城  阅读(40)  评论(0编辑  收藏  举报