1024!末尾有几个零?

来源:互联网 发布:交大知行大厦附近租房 编辑:程序博客网 时间:2024/04/29 20:18

1024可计为N

解题方法有两种:

一、使用大整数运算,也算是“暴力求解”了。但只看可能的求解长度就下一跳啊。此法不可取。

二、运用数学理论不难发现:

1、结果0的个数是和其小于N中个位为5(或0)的个数不无关系的。不是5的倍数无论和哪个相乘都不可能出现个位为0的结果。

N以内的偶数个数肯定是大于5倍数的个数的(5和偶数相乘才可能增加末位0的个数)。

所以有a = N / 5;

2、再看一下25这个是不是有点特殊呢?25 * 4 = 100,能产生两个0,这是为什么呢?因为25 = 5 * 5;因为能产生多余0的个数是和包含因子5的个数相关的。

25 * 4 = 100,有两个0,100无论再和任何非10倍数的数相乘都不可能产生多余两个0的数。同理(75 = 25 * 3 = 5 * 5 *3)* 4 = 300;(125 = 5 * 5 * 5 )* 8 = 1000;

即一个数包含多少个因子5其就可以同足够的偶数相乘产生相同个数的末位0。

总结如下:N的阶乘中末位0的个数为:N/5 + N/25 + N/125 ……

计算测试程序:

<pre name="code" class="cpp">#include <stdio.h>int zero_count(int n);int main(int argc ,char *argv[]){printf("zero_count is %d...\n", zero_count(1024));return 0;}int zero_count(int n){int count = 0;while(n > 0) {n = n/5;count += n;}return count;}


原文链接:http://blog.csdn.net/gdujian0119/article/details/7237867

0 0
原创粉丝点击