zoukankan      html  css  js  c++  java
  • 洛谷P1134 阶乘问题[数论]

    题目描述

    也许你早就知道阶乘的含义,N阶乘是由1到N相乘而产生,如:

    12! = 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x 11 x 12 = 479,001,600

    12的阶乘最右边的非零位为6。

    写一个程序,计算N(1<=N<=50,000,000)阶乘的最右边的非零位的值。

    注意:10,000,000!有2499999个零。

    输入输出格式

    输入格式:

    仅一行包含一个正整数N。

    输出格式:

    单独一行包含一个整数表示最右边的非零位的值。

    输入输出样例

    输入样例#1:
    12
    输出样例#1:
    6


    用long long 加暴力去0取模可以过大部分点
    正解:
    *2*5能凑成10,所以每个数扔掉10 2 5因子再乘
    cnt表示2比5多了几个,最后乘上
    乘2是有规律的,2 4 6 8
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    int n,x=1,cnt=0,a[4]={6,2,4,8};
    int main(int argc, const char * argv[]) {
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            int t=i;
            while(t%10==0) t/=10;
            while(t%2==0) t/=2,cnt++;
            while(t%5==0) t/=5,cnt--;
            x=(x*(t%10))%10;
        }
        if(cnt) x=x*a[cnt%4]%10;
        printf("%d",x);
        return 0;
    }
  • 相关阅读:
    GoCN每日新闻(2019-11-03)
    GoCN每日新闻(2019-11-02)
    GoCN每日新闻(2019-11-01)
    GoCN每日新闻(2019-10-31)
    GoCN每日新闻(2019-10-30)
    GoCN每日新闻(2019-10-29)
    xms西软预定列表-房类市场
    GoCN每日新闻(2019-10-28)
    GoCN每日新闻(2019-10-27)
    GoCN每日新闻(2019-10-26)
  • 原文地址:https://www.cnblogs.com/candy99/p/6049351.html
Copyright © 2011-2022 走看看