这个题和51nod1003 原理差不多
都是关于阶乘的一些技巧
题目:
原理:
二进制数
乘上2 末尾会多一个0 再乘一个二 末尾会再多一个0 也就是乘上2^2(2的平方)末尾会多两个0
以此类推 末尾有多少0 怎么算
这个数 的因子中2出现的次数 就是末尾0的个数
而求一个数字n的阶乘中某个因子出现的次数 我们的方法之前说过
我们用n累除这个数 得到的数累加 就是次数
(注意 这个方法 适用条件 我们要求的数字是n的阶乘 此时我们利用n 就可以求得次数 不用算出n!)
代码
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main(){
int n;
while(~scanf("%d",&n)){
int cnt=0;
while(n){
n/=2;
cnt+=n;
}
printf("%d\n",cnt+1);
}
return 0;
}