zoukankan      html  css  js  c++  java
  • 题解 UVA10212 【The Last Non-zero Digit.】

    题目链接

    这题在学长讲完之后和看完题解之后才明白函数怎么构造。

    这题构造一个$f(n)$

    $f(n)$ $=$ $n$除以 $2^{a}$ $*$ $5^{b}$ ,$a$ , $b$ 分别是 $n$ 质因数分解后$2,5$的个数。

    然后就暴力算一算就好了。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    //处理出来n的质因子中,x的个数。
    int  prime(int n,int x)
    {
        int res=0;
        while(n) res+=n/x,n/=x;
        return res;
    }
    //f(1)到f(n)中不以5结尾的奇数的个数
    int expect_5_end_odd(int n,int x)
    {
        if(!n) return 0;
        return n/10+(n%10>=x)+expect_5_end_odd(n/5,x);
    }
    //以5结尾的数的个数。
    int expect_5_end(int n,int x)
    {
        if(!n) return 0;
        return expect_5_end(n/2,x)+expect_5_end_odd(n,x);
    }
    
    int t[4][4]={
        6,2,4,8,//2^4 2 2^2 2^3 的最后一位
        1,3,9,7,//3^4 3 3^2 3^3 的最后一位
        1,7,9,3,//4……
        1,9,1,9//5……
    };
    
    signed main()
    {
        int n,m;
        while(~scanf("%d%d",&n,&m))
        {
            m=n-m;
            int prime_2=prime(n,2)-prime(m,2);
            int prime_3=expect_5_end(n,3)-expect_5_end(m,3);
            int prime_5=prime(n,5)-prime(m,5);
            int prime_7=expect_5_end(n,7)-expect_5_end(m,7);
            int prime_9=expect_5_end(n,9)-expect_5_end(m,9);
        
            if(prime_2<prime_5){puts("5");continue;}
        
            int res=1;
            if(prime_2>prime_5) res*=t[0][(prime_2-prime_5)%4];
            res=res*t[1][prime_3%4]*t[2][prime_7%4]*t[3][prime_9%4]%10;
            printf("%lld
    ",res);
        }
        return 0;
    }
  • 相关阅读:
    Webpack配置开发环境总结
    vue2.0 引入font-awesome
    vue-cli 脚手架项目简介(一)
    CSS3伪类与伪元素的区别及注意事项
    页面滚动到可视区域执行操作
    56. 合并区间
    <leetcode c++>卖股票系列
    面试题 16.01. 交换数字
    542. 01 矩阵
    <leetcode c++> 445. 两数相加 II
  • 原文地址:https://www.cnblogs.com/arcturus/p/9180237.html
Copyright © 2011-2022 走看看