数学技巧真有趣,看出规律就很简单了 wa
题意:给出数k 输出所有阶乘尾数有k个0的数
这题来来回回看了两三遍, 想的方法总觉得会T
后来想想 阶乘 emmm 1*2*3*4*5*6*7*8*9*10...*n 尾数的0只与5有关
是5的几倍就有几个0 因为5前面肯定有偶数 乘起来就有一个0 而且最后输出肯定是连续的5个
hhh 兴奋 开始上手 乱搞一下 发现复杂度还行
测样例 发现 k=5 的时候不对了 输出25~29了 应该是0的
咦 测了一下 25!应该是6个0的 25=5*5 有两个5 wa
每次循环找的时候都判断是否是5的倍数,是则不断除5,计数累加; 否则继续下一循环
hhh 又乱搞了一下 A了
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<string> #include<algorithm> #include<map> #include<queue> #include<stack> #include<list> #include<set> using namespace std; typedef long long ll; typedef pair<ll,ll> p; typedef long double ld; #define mem(x) memset(x, 0, sizeof(x)) #define me(x) memset(x, -1, sizeof(x)) #define fo(i,n) for(i=0; i<n; i++) #define sc(x) scanf("%lf", &x) #define pr(x) printf("%lld ", x) #define pri(x) printf("%lld ", x) #define lowbit(x) x&-x const ll MOD = 1e18 +7; const ll N = 6e6 +5; int main() { ll i, j, k, l=0; ll n, m, t=5; cin>>k; ll co=1; while(1) { if(co>=k) break; t+=5; //不断+5 统计5的个数 m=t; while(m%5==0) //统计该数有几个5 { m/=5; co++; } } if(co>k) { cout<<0<<endl; return 0; } cout<<5<<endl; for(i=t;i<=t+4; i++) { cout<<i<<' '; }cout<<endl; return 0; }