zoukankan      html  css  js  c++  java
  • Evanyou Blog 彩带

      题目传送门

    阶乘问题

    题目描述

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

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

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

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

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

    输入输出格式

    输入格式:

     

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

     

    输出格式:

     

    一个整数,表示最右边的非零位的值。

     

    输入输出样例

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

    说明

    USACO Training Section 3.2


      分析:

      其实真的很简单。因为只要求最右边的非零位,那么就从2~n一次遍历(因为1不用乘),每次乘之前,先判断如果是10的倍数就除以10,直到它不是10的倍数,乘完以后对结果进行同样的判断。为了防止结果过大,可以每次对一个特别大的数取模(如果取模的数过小,可能会使结果出现误差,易证)。最后把结果模10输出即可。

      Code:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll n,ans=1;
    int main()
    {
        cin>>n;
        for(ll i=2;i<=n;i++){
            ll ka=i;
            while(ka%10==0){ka/=10;}
            ans=ans*ka;
            while(ans%10==0){ans/=10;}
            ans=ans%100000000;}
        cout<<ans%10; return 0;
    }
  • 相关阅读:
    [Apio2014]回文串
    省队集训day6 C
    省队集训day6 B
    省队集训Day3 light
    省队集训Day3 tree
    多串匹配
    ubuntu卸载福昕阅读器
    greenlet
    python multithread task_done
    mysql参数调优
  • 原文地址:https://www.cnblogs.com/cytus/p/9121856.html
Copyright © 2011-2022 走看看