#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; }