n!的末尾0的个数

题目描述:

输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2 。

解题思路:

对于这样的问题,我们可以换个思维方式,它要求0的个数,那么0是怎么来的?
是不是一对2*5得到的0,所以我们可以分解这个问题分,把他看作是求整数n分解质因数后,一共有多少组min(2,5),在当然2的个数肯定比5多,所以我们继续往下拆解,可以看做是求n中有多少个5!!!

在n这个数中,每隔5个就会分解产生一个0,如:5,10,15,20….
每隔5*5个就会多分解产生一个5,如:25,50,75…..
再阁5*5*5就又多一个5…

废话少说上代码
#include <stdio.h>

int CountZero(int n)
{
    int count = 0;
    while(n)
    {
        count = count+n/5;
        n /= 5;
    }
    return count;
}

int main()
{
    int n;
    scanf("%d\n",&n);
    int ret = CountZero(n);
    printf("%d\n",ret);
    return 0;
}

这里写图片描述

另外

可扩展到:n!的二进制表示中最低位1中的位置。相当于求质因数的2的个数
原理是:
假如你把1 × 2 ×3× 4 ×……×N中每一个因数分解质因数,结果就像:
1 × 2 × 3 × (2 × 2) × 5 × (2 × 3) × 7 × (2 × 2 ×2) ×……

代码这里就不实现了

猜你喜欢

转载自blog.csdn.net/qq_40840459/article/details/81284435
今日推荐