问题很简单:给定一个整数n,那么n的阶乘末尾有多少个连续的0呢?
那个可以去求这个阶乘吗,大数的代码上去一套?这个大数求出来肯定是很慢的,还有其他方法吗,你可以观察一个产生0,本质是2*5,出现了2一定会出现5,2的个数会大于5的个数,所以我可以直接统计5的个数,统计每个数有几个因子5
#include <bits/stdc++.h> using namespace std; int main() { int n; while (cin >> n) { int num = 0 ,i; for(int m=1;m<=n;m++) { i=m; while (i % 5 == 0) { i=i/5; num++; } } cout << num << endl; } }
当然可以直接关注5
f(5!) = 1 + f(1!) = 1
f(10!) = 2 + f(2!) = 2
f(20!) = 4 + f(4!) = 4
f(100!) = 20 + f(20!) = 20 + 4 + f(4!) = 24
f(1000!) = 200 + f(200!) = 200 + 40 + f(40!) = 240 + 8 + f(8!) = 248 + 1 + f(1) =249
#include <bits/stdc++.h> using namespace std; int main() { int n; while (cin >> n) { int num = 0; while (n > 0) { num += n / 5; n /= 5; } cout << num << endl; } }
原文地址:https://www.cnblogs.com/BobHuang/p/12245428.html
时间: 2024-10-07 19:37:04