0
点赞
收藏
分享

微信扫一扫

30天学会基础算法 (阶乘数码—高精度) ^6^

M4Y 2022-04-23 阅读 51
c++算法

题目链接

题目描述

输入格式

输出格式

输入样例

2
5 2
7 0

输出样例

1
2

code

#include<iostream>
#include<cstring>
using namespace std;
int c[100000];//因为是高精度乘法,所以数组要多开一点
int main()
{
    int t, n, a;
    cin >> t;
    for (int i = 0; i < t; i++)
    {
        cin >> n >> a;
        memset(c, 0, sizeof(c));//将数组全部初始化为0
        c[0] = 1;//让第一个数为1,不然怎么乘都是0
        int l = 1;//l表示当前数据长度
        for (int j = 2; j <= n; j++)//开始阶乘计算
        {
            int w = 0;
            for (int k = 0; k < l; k++)//高精度乘单精度
            {
                c[k] = c[k] * j + w;
                w = c[k] / 10;
                c[k] %= 10;
            }
            while (w > 0)//处理多进位
            {
                c[l] = w % 10;
                l++;
                w /= 10;
            }
        }
        int sum = 0;
        for (int j = 0; j < l; j++)
            if (c[j] == a) sum++;//统计个数
        cout << sum << endl;
    }
    return 0;
}
  • 无注释版
#include<iostream>
#include<cstring>
using namespace std;
int c[100000];
int main()
{
    int t, n, a;
    cin >> t;
    for (int i = 0; i < t; i++)
    {
        cin >> n >> a;
        memset(c, 0, sizeof(c));
        c[0] = 1;
        int l = 1;
        for (int j = 2; j <= n; j++)
        {
            int w = 0;
            for (int k = 0; k < l; k++)
            {
                c[k] = c[k] * j + w;
                w = c[k] / 10;
                c[k] %= 10;
            }
            while (w > 0)
            {
                c[l] = w % 10;
                l++;
                w /= 10;
            }
        }
        int sum = 0;
        for (int j = 0; j < l; j++)
            if (c[j] == a) sum++;
        cout << sum << endl;
    }
    return 0;
}
举报

相关推荐

0 条评论