(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!中末尾有多少个0

http://blog.csdn.net/cow__sky/article/details/36190587 分析: 对N进行质因数分解 N=2^x * 3^y * 5^z...,由于10...
  • shubingzhuoxue
  • shubingzhuoxue
  • 2016年09月18日 17:08
  • 1041

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

题目: 初阶:1*2*3*……*100 求结果末尾有多少个零。 进阶: N的阶乘末尾有多少个0分析: 一般类似的题目都会蕴含某种规律或简便方法的阶乘末尾一个零表示一个进位,则相当于乘以10而10...
  • TommyZht
  • TommyZht
  • 2015年06月01日 13:46
  • 2208

ACM-大数阶乘末尾零的个数

新浪博客 发表时间 -- 2009-07-26 21:56:18 阶乘末尾0的个数 有一个题目说的是求 100 的阶乘末尾有多少个 0. 题解中给出的讲解提到, 一个数 n 的阶乘末尾有多少个 0...
  • wwbmyos
  • wwbmyos
  • 2012年04月03日 21:09
  • 881

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

文章的原地址:http://blog.csdn.net/zyh2525246/article/details/53697136 一、阶乘数小的时候可以直接计算。 例如:求10!后面零的个数...
  • qikaihuting
  • qikaihuting
  • 2017年03月25日 16:50
  • 3463

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

问题描述:给定一个整数N,那么N的阶乘N!末尾有多少个0?这个问题的难点在于,不能直接计算出N!,因为会溢出。既然不能直接计算,那就换个姿势计算(手动滑稽)首先,我们考虑到N!末尾0的个数和 N!有多...
  • KasumiMasami
  • KasumiMasami
  • 2016年08月29日 16:23
  • 985

南洋理工ACM——阶乘的0

阶乘的0 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述计算n!的十进制表示最后有多少个0 输入第一行输入一个整数N表示测试数据的组数...
  • qq_24729325
  • qq_24729325
  • 2015年10月11日 00:10
  • 456

N的阶乘末尾有多少个0

问题描述:                   给定一个数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3628800  如果N=10000呢,怎么计算?                ...
  • u014112584
  • u014112584
  • 2014年03月17日 17:46
  • 1957

求整数N阶乘N!末尾有多少个0呢?

一、采用常规的做法,求出N的阶乘,然后计算出该结果末尾的0的个数; 这种方法有两个缺陷: (1)无论将结果定义为long还是double,结果值都会溢出; (2)效率低下;方法一: 那么我们分...
  • gogogo_sky
  • gogogo_sky
  • 2017年07月22日 14:48
  • 152

ACM阶乘之和

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

ACM-另一种阶乘问题

描述 大家都知道阶乘这个概念,举个简单的例子:5!=1*2*3*4*5.现在我们引入一种新的阶乘概念,将原来的每个数相乘变为i不大于n的所有奇数相乘例如:5!!=1*3*5.现在明白现在这种阶乘的...
  • u012701023
  • u012701023
  • 2015年05月25日 23:24
  • 524
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(ACM数论)求N的阶乘末尾有多少个0
举报原因:
原因补充:

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