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

    说明

    USACO Training Section 3.2

    题目好理解,

    正解cannot understand,

    下面给出暴力解法,

    十分简单清晰。

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    long long n,ans=1;;
    
    
    int main()
    {
    	scanf("%lld",&n);
    	for(int i=2;i<=n;++i)
    	{
    		ans*=i;
    		while(ans%10==0) ans/=10;
    		ans%=10;
    	}
    	printf("%lld",ans%10);
    }
    

    看,是不是很好理解,

    但,你交吧,29分。

    下面来看ac代码

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    long long n,ans=1;;
    
    
    int main()
    {
    	scanf("%lld",&n);
    	for(int i=2;i<=n;++i)
    	{
    		ans*=i;
    		while(ans%10==0) ans/=10;
    		ans%=10000000;
    	}
    	printf("%lld",ans%10);
    }
    

    哇塞,是不是很神奇,居然这样就ac了。

    那么,有什么区别呢,

    区别就是,

    ans在%的时候大一点点,防爆啦2333.

  • 相关阅读:
    高级查询
    简单查询
    CRUD
    T-SQL语句
    数据库规范
    导出含有特定字符串的注册表
    .net、jquery、ajax、wcf实现数据库用户名检测局部刷新
    数据结构实验之二叉树二:遍历二叉树
    传纸条
    数据结构实验之栈与队列五:下一较大值(一)
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9030028.html
Copyright © 2011-2022 走看看