【题解】--阶乘

79 阅读1分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路

力扣面试16.05.阶乘尾数

 


 

int trailingZeroes(int n){
    int int sum=1;int cnt=0;
for(int int i=2;i<=n;i++){   //先算n的阶乘
    sum*=i;
}
while(sum%10==0){           //算尾位0的个数
    cnt++;
    sum/=10;                //每次去尾位

}return cnt;
}

 

    出错了,常规溢出(溢出指的是算的数大于int所在值的范围内) 注意该题没有规定n的阶乘的大小


正确答案:

int trailingZeroes(int n){  //直接计算是否为5的倍数
    int res = 0;
    while (n) {
        n /= 5;
        res += n;           //res加上 n/5后的值
    }
    return res;
}