【经典智力题】1024! 末尾有多少个0?——“计算阶乘末尾0的数量”问题引出

来源:互联网 发布:数控编程培训靠谱吗 编辑:程序博客网 时间:2024/05/24 23:13

网上有这样一个广为流传的有趣问题:


1024! 末尾有多少个0?


相应的解法是:


末尾0的个数取决于乘法中因子2和5的个数。显然乘法中因子2的个数大于5的个数,所以我们只需统计因子5的个数。
是5的倍数的数有: 1024 / 5 = 204个
是25的倍数的数有:1024 / 25 = 40个
是125的倍数的数有:1024 / 125 = 8个
是625的倍数的数有:1024 / 625 = 1个
所以1024! 中总共有204+40+8+1=253个因子5。
也就是说1024! 末尾有253个0。


int countZeros( int n ){    int num = 0;    while( n > 5 ){        n = ( n - (n%5) ) / 5;        num += n;    }    return num;}



这让我忽然想到ACM里面有一道“计算某数阶乘末尾0的个数”的题目,于是找了一下,是POJ的,题目地址在这:点击打开链接


我又自己做了一下这道题目,一遍AC,贴代码留念。


AC代码如下:

#include <iostream>using namespace std;int countZeros( int n ){    int num = 0;    while( n >= 5 ){        n /= 5;        num += n;    }    return num;}int main(){    int n;    while( cin>>n ){        while( n-- ){            int m;            cin>>m;            cout<<countZeros(m)<<endl;        }    }    return 0;}



0 0
原创粉丝点击