可以发现,在数零时,只需要数出现几个五
首先: 5,10,15,20,25
分别是:1,2 ,3 ,4 ,6
然后继续……
发现,在1、6、31、156、781……时,会出现5的幂(>=1)
规律:×5+1
打个表,枚举0~4个当前可行值,剪掉之后继续枚举下一个……直到弄不完
不说了,贴代码,不懂自己看……
#include <cstdio>
int main()
{
int n, k = 5, i, x[100] = {}, gs = 0, y[100];
scanf("%d", &n);
for (i = 1; i <= 100000; i = i * 5 + 1, k *= 5) {
if (i > n) break;
x[gs] = i;
y[gs++] = k;
}
int ans = 0, remain = n, j;
for (i = gs - 1; i >= 0; i--) {
for (j = 0; j <= 4; j++)
if (x[i] * j <= remain && x[i] * (j + 1) > remain) break;
if (j > 4) break;
ans += y[i] * j;
remain -= x[i] * j;
}
if (remain != 0)
printf("0\n");
else printf("5\n%d %d %d %d %d\n", ans, ans + 1, ans + 2, ans + 3, ans + 4);
return 0;
}