常见题目之n的阶乘末尾有多少个0

原创 2015年09月29日 10:55:24
问题:N的阶乘(N!)中的末尾有多少个0?

     例如:N = 5,N! = 120.末尾有1个0.

解答:将N的阶乘看为10的M次方的乘积,末尾就有M个0。将N的阶乘进行分解可以得到:2的X次方,3的Y次方,5的Z次方,7的T次方的

乘积。10=2*5,所以M只和X、Z有关,每一对2和5相乘都能得到10,于是M=min(X,Z),而一般情况下X>Z,即偶数个数肯定要大于5的倍数,因此可以近似成M=Z。通过Z可以得到M的值,有两种方法实现。


方法一
    要计算Z,最直接的方法就是求出N的阶乘的所有因式(1,2,3,...,N)分解中5的指数。然后求和
    

int fun1(int n)
{
    int num = 0;
    int i,j;
    
    for (= 5;<= n;+= 5)
    {
        j = i;
        while (% 5 == 0)
        {
            num++;
            j /= 5;
        }
    }
    
    return num;
}




方法二:

Z = N/5 + N /(5*5) + N/(5*5*5).....知道N/(5的K次方)等于0

公式中 N/5表示不大于N的数中能被5整除的数贡献一个5,N/(5*5)表示不大于N的数中能被25整除的数再共享一个5.......




int fun2(int n)
{
    int num = 0;
    
    while(n)
    {
        num += n / 5;
        n = n / 5;
    }
    
    return num;
}


相关文章推荐

ConcurrentLinkedQueue的实现原理和源码分析

原文链接:http://www.jianshu.com/p/26d9745614dd前言我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一...

java 性能调优之内存模型深入详解

1. 概述       多任务和高并发是衡量一台计算机处理器的能力重要指标之一,虽然判断服务器的好坏主要跟CPU,内存,硬盘有关,比如说CUP核心数和线程,内存主要看内存的大小,硬盘主要看转速以及容...

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

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

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...

给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。

思路 这个题拿到我第一个思路是先求出阶乘的结果,然后查看该结果最后一位是否为0,具体就是先%10查看最后一位是否为0,如果是再除以10,消掉最后一位。然后循环一直至最后一位不是0,再把计数器的值返...

用十进制计算30!(30的阶乘),将结果转化成3进制进行表示的话,该进制下的结果末尾会有多少个0?

如何是小阶乘的话,可以使用这个算法:#include int main() { int n; int i; int sum; printf("请输入阶乘:"); scanf("%d",&n)...

算法->编程之美2.2 N!末尾有多少个0

N的阶乘末尾有多少个0 思考:0来自何方? 10*10*10*。。。乘以10就会产生0。 那么N!可以写成下面这种形式: 且K不能被10整除,那么N!的末尾就有M个0。 那么M是多少呢=...

求N!末尾有多少个0

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

计算阶乘n!末尾所含0的个数

问题描述给定参数n(n为正整数),请计算n的阶乘n!末尾所含有“0”的个数。例如,5!=120,其末尾所含有的“0”的个数为1;10!= 3628800,其末尾所含有的“0”的个数为2;20!= 24...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:常见题目之n的阶乘末尾有多少个0
举报原因:
原因补充:

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