(ACM数论)求N的阶乘末尾有多少个0

原创 2016年08月29日 16:23:24

问题描述:给定一个整数N,那么N的阶乘N!末尾有多少个0?

这个问题的难点在于,不能直接计算出N!,因为会溢出。

既然不能直接计算,那就换个姿势计算(手动滑稽)

首先,我们考虑到N!末尾0的个数和 N!有多少个因子10有关,而10 = 2 * 5 ,于是我们得到了一个解法:

把2,3,… ,N每个数拥有因子2的个数累加起来记为countTwo,把2,3,… ,N每个数拥有因子5的个数累加起来记为countFive,问题的答案则为min(countTwo, countFive)

代码如下:

int countTwo = 0, countFive = 0;
for(int i = 2 ; i <= N ; i++)
{
    int tmp = i;//每个数
    while(tmp % 2 == 0)
    {
        tmp = tmp / 2;
        countTwo++;
    }
    while(tmp % 5 == 0)
    {
        tmp = tmp / 5;
        countFive++;
    }
}
//min(countTwo,  countFive)
printf("ans = %d\n", 
countFive < countTwo ? countFive :countTwo);

输入不同的N可以发现,countFive 必然小于 countTwo,这是由于:5^n > 2^n,即每有一个因子5,就必定会有一个因子2。
所以解法可以改为把2,3,… ,N每个数拥有因子5的个数累加起来记为countFive,问题答案为countFive,代码如下:

int countFive = 0;
for(int i = 5 ; i <= N ; i++)
{
    int tmp = i;//每个数
    while(tmp % 5 == 0)
    {
        tmp = tmp / 5;
        countFive++;
    }
}
printf("ans = %d\n", countFive);
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

求关于n的阶乘结果后面有几个零?如2016的阶乘(网易的笔试选择题)

文章的原地址:http://blog.csdn.net/zyh2525246/article/details/53697136 一、阶乘数小的时候可以直接计算。 例如:求10!后面零的个数...

ACM阶乘之和

描述给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No; 输入第一行有一个整数0 每组测试数据有一个正...
  • ljp1919
  • ljp1919
  • 2015年01月08日 15:41
  • 1450

ACM-大数阶乘

描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入输入一个整数m(0输出输出m的阶乘,并在输出结束之后输入一个换行符样例输入 50 样例输出 30...

计算N的阶乘结果末尾含多少个零

计算N的阶乘结果末尾含多少个零

n的阶乘末尾还有多少个0

n! 末尾有多少个 0 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索“cqs_2012”即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己...

hdu1124 数论 N阶乘有多少个尾0

Factorial Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

求N!末尾有多少个0

求N!末尾有多少个0 /*思考: 该题实际上是求(2 5)因子对的个数。对于任意一个阶乘,5因子的个数总是小于2因子的个数,仅需考虑n!中5因子的个数 方法:   (1) 将该数用 ...

求阶乘N!末尾0的个数

POJ上有这个题目。http://poj.org/problem?id=1401。去掉一大堆没有用的信息,POJ的描述如下:For example, they defined the function...

n的阶乘结果中末尾有多少个零?

题目:n的阶乘中一共有多少个零? 解答:产生零的结果只能有一种可能性那就是2*5=10,然而n的阶乘本质上是可以拆解为很多2和5以及其他不包含2和5的乘数的积,例如5的阶乘:1*2*3*4*5=1*2...

n!阶乘末尾有多少个零0

题目: 初阶:1*2*3*……*100 求结果末尾有多少个零。 进阶: N的阶乘末尾有多少个0分析: 一般类似的题目都会蕴含某种规律或简便方法的阶乘末尾一个零表示一个进位,则相当于乘以10而10...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(ACM数论)求N的阶乘末尾有多少个0
举报原因:
原因补充:

(最多只允许输入30个字)