#include"iostream"
using namespace std;
int main()
{
int N,sum=0;
long long int NA = 1;
cin >> N;
for (int i = 1; i <= N; i++)
{
NA = NA * i;
}
long long int g = NA;
for (int i = 10; i < g; g=g/10)
{
if (NA%10 == 0)
{
sum = sum + 1;
}
NA = NA / 10;
}
cout << sum;
}
我这个龙鸣代码,大家看个笑,如果有知道怎么做的dalao能够教教我就太好了
先说这题的目的就不在于让你存储100!之类的东西。。。。而是要靠——找规律!//(算法);我的想法是:末尾想要有0,则必须得有两个数相乘之和为10的倍数,譬如2*5=10,4*5=20……总而言之就是:必须要有5。因此,想知道一个数的阶乘后面有几个零,只需要找出小于等于这个数的正整数中有多少个5,即可。譬如当n=100,100/5=20,因此有20个数是5的倍数,而其中如25=5*5,50=5*5*2,75=5*5*3,100=5*5*4……,这些数又可以多拆分出4个5,所以在100以内5的数量是24,也就是最后的答案!
实现如下:
#include"iostream"
using namespace std;
int main()
{
int n, cnt = 0;
cin >> n;
for (int i = 5; i <= n; i++)
{
if (i % 5 == 0)
{
cnt++;
if (i % 25 == 0)
{
cnt++;
}
}
}
cout << cnt;
return 0;
}
2L实属厉害,我是不断取模暴力做的
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,cnt = 0;
cin >> n;
int sum=1;
for (int i = 1; i <= n; i++)
{
sum = sum * i % 100000;
if (sum % 10 == 0)
{
while (1)
{
if (sum % 10 == 0)
{
cnt++;
sum /= 10;
}
else
{
break;
}
}
}
}
cout << cnt;
return 0;
}