Я бы использовал простой рекурсивный подход, здесь с символами, но вы могли бы построить свои числа, используя и другие средства ..
в С:
#include <stdio.h>
void keystrokes(int x, int lo, int hi, char array[]) {
int i;
if (x > hi)
return;
if (x >= lo) {
array[x] = 0;
printf ("%s\n", array);
}
for (i = 2; i < 10; i++) {
array[x] = i+'0';
keystrokes (x+1, lo, hi, array);
}
}
int main(void)
{
char array[33];
keystrokes(0, 2, 32, array);
return 0;
}
Он может быть немного оптимизирован (например, для всех 32-значных чисел он все равно будет делать 10 дополнительных рекурсивных вызовов), но для вычисления всех возможных комбинаций все равно потребуется вечность.