• Tyvj1037


    题目链接

    分析:
    这道题还是挺好的
    分da析biao发现
    每五个一组,每组的末尾0的个数相同
    分别是0,1,2,3…
    后面的0都是不用进行计算的
    一眼高精—->只过了3个点

    注意到了k<=10
    看来不用高精也行,只需要在保证答案没有0的情况下每次%10^k即可
    但是我们怎么去除0的存在呢

    显然*10就会让答案多出一个0
    而10=2*5,也就是说乘的数中,如果有2*5(10),也会产生一个多余的0
    那么我们干脆把所有可能使答案出现0的元素直接去掉

    我们把乘上的数中的所有5去掉,同时把相应数量的2也去掉
    剩下的数不停地乘啊乘就好了

    tip

    最后这一步

    num[++tot]=ans%10;

    我强转int,炸了三个点
    所以以后还是老实点吧

    这里写代码片
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #define ll long long
    
    using namespace std;
    
    ll mod=1;
    ll ans=1;
    int n,k,cnt,tot,cnt2;
    ll num[15];
    
    int main()
    {
        scanf("%d%d",&n,&k);
        for (int i=1;i<=k;i++) mod*=10;
        cnt=0;
        for (int i=5;i<=n;i++)
        {
            int j=i;
            while ((j%5)==0) cnt++,j/=5;
        }
        cnt2=cnt;
        for (int i=2;i<=n;i++)
        {
            int j=i;
            while (cnt&&j%5==0) cnt--,j/=5;
            while (cnt2&&j%2==0) cnt2--,j/=2;
            ans=(ans*(ll)j)%mod;
        }
        tot=0;
        while (ans)
        {
            num[++tot]=ans%10;
            ans/=10;
        }
        for (int i=k;i>=1;i--) printf("%lld",num[i]);
        return 0;
    }
  • 相关阅读:
    ajax的一些知识
    前端性能优化汇总
    jquery实现一些小动画二
    python简单日志处理
    逆波兰式---C实现
    java常见异常
    Hive与HBase集成及常见问题解决
    SQL for HBase
    Demystifying the Skip Scan in Phoenix
    Difference between DDL, DML and DCL commands
  • 原文地址:https://www.cnblogs.com/wutongtong3117/p/7673334.html
Copyright © 2020-2023  润新知