• 洛谷 P1591 阶乘数码


    题目描述

    求n!中某个数码出现的次数。

    输入输出格式

    输入格式:

     

    第一行为t(≤10),表示数据组数。接下来t行,每行一个正整数n(≤1000)和数码a。

     

    输出格式:

     

    对于每组数据,输出一个整数,表示n!中a出现的次数。

     

    输入输出样例

    输入样例#1: 复制
    2
    5 2
    7 0
    输出样例#1: 复制
    1
    2
    思路:高精度板子
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int t,n,m,ans;
    struct nond{
        int num[100000];
    }v[1010];
    void cheng(int pos,int num1[500]){
        for(int i=0;i<=num1[0];i++)
            v[pos].num[i]=num1[i];
        for(int i=1;i<=num1[0];i++)
            v[pos].num[i]*=pos;
        for(int i=1;i<=num1[0];i++)
            if(v[pos].num[i]>=10){
                if(i==num1[0])    num1[0]++;
                v[pos].num[i+1]+=v[pos].num[i]/10;
                v[pos].num[i]%=10;
            }
        for(;num1[0]>=1;num1[0]--)    if(v[pos].num[num1[0]]!=0)    break;
        v[pos].num[0]=num1[0];
    }
    int main(){
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&m);
            for(int i=1;i<=n;i++)    v[i].num[0]=1,v[i].num[1]=1;
            for(int i=2;i<=n;i++)    cheng(i,v[i-1].num);
            for(int i=v[n].num[0];i>=1;i--)
                if(v[n].num[i]==m)    ans++;
            cout<<ans<<endl;ans=0;memset(v,0,sizeof(v));
        }
    }
     
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    计算任意两个日期的间隔天数
    题目标题: 排它平方数
    历届试题 剪格子
    历届试题 翻硬币
    C语言中%d,%o,%f,%e,%x的意义
    历届试题 买不到的数目
    九度 OJ1008 hdu 3790
    南洋理工 OJ 115 城市平乱 dijstra算法
    蓝桥杯 错误票据 原创代码+思路
    历届试题 连号区间数
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7995176.html
Copyright © 2020-2023  润新知