LeetCode172. 阶乘后的零

Posted wzwi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode172. 阶乘后的零相关的知识,希望对你有一定的参考价值。

最开始一看,就觉得挺简单,就是先算出阶乘的值,再除以10,如果%为0,count++,然后s=s/10,如果不为0,就直接输出。

class Solution {
    public int trailingZeroes(int n) {
        int i;
        int s = 1;
        int count = 0;
        for(i = 1;i <= n;i++)
        {
            s = s*i;
        }
        while(s != 0)
        {
            if(s % 10 == 0)
            {
                count++;
                s = s / 10;
            }
            else
            {
                break;
            }
        }
        return count;
    }
}

前面都很正常,有问题的就是13以后,因为int型是4个字符,所以超过了就会自动省略后面的值,

s改为long型时,就是到30以后,有问题,那么,计算出来阶乘值这个思路是有问题的,数值太大了。

再思考思考10,可以考虑其中有多少个5.

class Solution {
    public int trailingZeroes(int n) {
        if (n <= 1) {
            return 0;
        }
        int count = 0;
        while (n != 0) {
            count = count + n / 5;
            n = n / 5;
        }
        return count;
    }
}

这里之所以n = n/5,因为每隔5个数,应该多了一个5,

比如30

应该有30,25,20,15,10,5,其中,25就含有两个5,

同时,50,45,40,35,30...,50含有两个5,就是每隔5个数,count应该再增加1

那么在这里n/5就可以判断是否大于5个数。

以上是关于LeetCode172. 阶乘后的零的主要内容,如果未能解决你的问题,请参考以下文章

leetCode第172题——阶乘后的零

LeetCode.172- 阶乘后的零

LeetCode172. 阶乘后的零

LeetCode 172. 阶乘后的零

leetcode——172.阶乘后的零

LeetCode 172 Factorial Trailing Zeroes(阶乘后的零)(*)