计算阶乘结果中0的个数【每日一题】

来源:互联网 发布:南宁众才商贸知乎 编辑:程序博客网 时间:2024/05/24 06:52

题目:给定一个整数N,那么N的阶乘N!末尾有多少个0呢?
例如:N=10,N!=3 628 800,N!的末尾有两个0

解决方法:
两个大数字相乘都可以拆分多个质数相乘,而质数相乘结果为0的只有2*5。那么两个数相乘尾数为0的个数其实就是依赖2和5的因子个数。又因为每两个连续数字就会有一个2,个数很充足所以只需要关心5因子的个数就行了。
那么怎么计算n!中5因子的个数呢?
把5的倍数都找出来,n!=(5*k)(5(k-1)*…*5*A)A为不含5因子的数相乘的结果,n=5*k+r(0<=r<=4)。假设f(n!)是计算阶乘n尾数0的个数,而g(n!)是计算n!中5因子的个数的那么就会有以下公式:
f(n!) = g(n!) = g(5^k*k!*A)=k+g(k!)=k+f(k!)其中k=n/5取整数
举个栗子:
f(5!)=1+f(1!)=1;
f(10!)=2+f(2!)=2
f(20!)=4+f(4!)=4
f(1000!)=200+f(200!)=200+40+f(40!)=240+8+f(8!)=248+1+f(1!)=249

#include <iostream>using namespace std;int GetN_1(int n){    if(n<5)        return 0;    else        return (n/5+GetN_1(n/5));}int main(){    cout<<GetN_1(10)<<endl;    return 0;}
原创粉丝点击