【第一点】注意将10分解可以得到:10=2*5;每次连续的0增加1说明源数字乘以10;分解一下就是乘以2和乘以5
由于需要乘以5,所以每次遇到5的倍数时才有可能连续的0增加1个
【第二点】特殊情况是遇到的数字不仅仅是5的倍数,有可能是25,125,...的倍数,此时直接增加连续2个0,3个0...
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n;
int ans[9]=
{25,125,625,3125,15625,78125,78125*5,78125*25,78125*125};
int num[maxn];
void init()
{
memset(num,0,sizeof(num));
int top=0;
bool flag;
for(int i=1; i<=100000; ++i)
{
top++;
flag=0;
for(int j=8; j>=0; --j)
if((5*top)%ans[j]==0)
{
i+=j+1;
num[i]=top;
flag=1;
break;
}
if(flag)
continue;
num[i]=top;
}
}
int main()
{
init();
while(~scanf("%d",&n))
{
if(num[n]>0)
{
printf("5\n");
for(int i=0; i<=3; ++i)
printf("%d ",5*num[n]+i);
printf("%d\n",5*num[n]+4);
}
else
printf("0\n");
}
return 0;
}