题目链接:
题意:
求 末尾有多少个 0 。
思路:
把10质因数分解:10=2*5,所以只需统计S的质因子中有多少个2和多少个5,因为2肯定比5多,因此,只需统计S的质因子中有多少个5即可。根据S的计算式,可以得到,对于一个数 i ,S中有 n-i+1 个 i 相乘。所以S中5的倍数有 n-5*1+1+n-5*2+1+...+n-5*t+1=(n+1)*t-5*(1+t)*t/2 个,同理可计算25的倍数、125的倍数 ......
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
int main()
{
scanf("%lld",&n);
ll ans=0;
ll tmp=5;
for(int i=1;;i++){
if(tmp>n) break;
ll t=n/tmp;
ans+=((n+1)*t-t*(t+1)/2*tmp);
tmp*=5;
}
printf("%lld\n",ans);
return 0;
}