Сочетания с повторениями

 

Может кто подскажет обобщеный алгоритм или код для поиска сочетаний с повторениями.

Как пример: дано 0,1, найти все их тройные сочетания, 000,001,010,011,100,101,110,111.

Типа такого (как для примера):

цикл от a=1 до n
   цикл от b=1 до n 
      цикл от с=1 до n
         печать a,b,c

Но сложность у меня в том, что если надо из 0,1 найти четверные сочетания, то в вышеприведенный алгоритм надо добавлять еще один цикл. А я хочу реализовать это  в виде функции для поиска любых сочетаний и ума не приложу как.

 
while (true) {
  X[0]++;
  for (int i = 1; i < N; i++) {
    X[i] += X[i - 1] / K;
    X[i - 1] %= K;
  }
  if (X[N - 1] / K > 1) {
    break;
  }
  // do something
}

p.s. Для K являющегося степенью двойки код можно оптимизировать, заменив операции деления и получения остатка от деления на побитовое ИЛИ и побитовое И.

 

для чего это все, как дальше будет использоваться?

  000,001,010,011,100,101,110,111 это тоже что и 0, 1, 2, 3, 4, 5, 6, 7 

может побитовыми операция все можно спростить? 

 
Перевод числа в систему счисления с другим основанием. Длина числа известна, основание тоже, можно найти максимальное число. Далее цикл от нуля до максимума и перевод в систему с другим основанием.
 
Благодарю.
Причина обращения: