LintCode 尾部的零

设计一个算法,计算出n阶乘中尾部零的个数

样例

样例  1:
	输入: 11
	输出: 2
	
	样例解释: 
	11! = 39916800, 结尾的0有2个。

样例 2:
	输入:  5
	输出: 1
	
	样例解释: 
	5! = 120, 结尾的0有1个。

这个题很多人都分析出了只要判断n/5以及n/5^2, 一直到n/5^m, 把他们累加起来就可以了。其中m要求n>5^m.

我的第一种答案也是这么做的,

long long trailingZeros(long long n) {
        // write your code here, try to do it without arithmetic operators.
        //m与n比较,a是m刚好大于n时的数字,5的多少次方
        long long m=5,a=1;
        while(m

后来我发现这种解法写的复杂了,应该有更简单的解法,于是写出来下一种解法:

long long trailingZeros(long long n) {
        // write your code here, try to do it without arithmetic operators.
        long long num = 0;
        while(n>0){
            num = num + n/5;
            n = n/5;
        }
        return num;
    }

在这里有一个非常重要的事,那就是变量的定义类型,由于测试数据中会有非常大的数字,使用int类型无法满足要求,因此要使用long long类型,这也是之前一直困扰我的地方。

你可能感兴趣的:(C++,代码题)