首页 > 其他 > 详细

阶乘末尾0的个数问题

时间:2015-05-25 09:52:26      阅读:247      评论:0      收藏:0      [点我收藏+]

问题:给定一个整数N,那么N的阶乘N!末尾有多少个0? 比如:N=10,N!=3628800,N!的末尾有2个0,写出算法。

回答:

int countZero(int N) {
    int ans = 0;
    int maxInt = 1000000000;//10^9
    int  tmpn = N;
    while(tmpn){
        maxInt /= 10;
        tmpn /= 10;
    }
    int lastBit = 1; //保存上一个阶乘 的最后 K位数字
    for (int i = 2; i <= N; i++) {
        int cnt = 0;//新增加的0的个数
        int tmp = lastBit * i;

        while ((tmp % 10) == 0) {
            tmp /= 10;
            cnt++;
        }
        //防止计算溢出
        if (tmp > maxInt)
            tmp = tmp % maxInt;
        lastBit = tmp;
        ans += cnt;
    }
    return ans;
}

阶乘末尾0的个数问题

原文:http://www.cnblogs.com/benchao/p/4527074.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!