#include #include struct bign { int d[1000]; int len; bign() { memset(d, 0, sizeof(d)); len = 0; } } a, b; bign add(bign &a, bign &b) { bign c; int carry = 0; for (int i = 0; i < a.len || i < b.len; i++) { int temp = a.d[i] + b.d[i] + carry; c.d[c.len++] = temp % 10; carry = temp / 10; } if (carry) { c.d[c.len++] = carry; } return c; } bign multi(bign &a, int &b) { bign c; int carry = 0; for (int i = 0; i < a.len; i++) { int temp = a.d[i] * b + carry; c.d[c.len++] = temp % 10; carry = temp / 10; } while (carry) { c.d[c.len++] = carry % 10; carry /= 10; } return c; } void print(bign &a) { for (int i = a.len - 1; i >= 0; i--) { printf("%d", a.d[i]); } printf("\n"); } bool vis[10] = {false}; bool judge(bign &c) { for (int i = 0; i <= c.len - 1; i++) { if (!vis[c.d[i]]) return false; } return true; } int main() { vis[0] = vis[1] = vis[4] = vis[9] = true; b.d[0] = 1, b.len = 1; a.d[0] = 0, a.len = 1; int num = 0; for (int i = 0; num < 2020; i++) { bign c = multi(a, i); if (judge(c)) { num++; printf("%d:", num); print(c); } a = add(a, b); } return 0; }