Перестановка цифр в основном является строковой операцией, а не (простой) математической операцией. Преобразование в массив (строку) с последующим использованием next_permutation()
звучит более разумно, чем пытаться сделать это математически.
Вот математическая версия - без сохраненных промежуточных значений:
int a = 194;
int b = (a / 100) * 100 + (a % 10) * 10 + ((a / 10) % 10) * 1; // 149
int c = (a % 10) * 100 + ((a / 10) % 10) * 10 + (a / 100) * 1; // 491
int d = (a % 10) * 100 + (a / 100) * 10 + ((a / 10) % 10) * 1; // 419
int e = ((a / 10) % 10) * 100 + (a / 100) * 10 + (a % 10) * 1; // 914
int f = ((a / 10) % 10) * 100 + (a % 10) * 10 + (a / 100) * 1; // 941
С промежуточными значениями немного легче увидеть, что происходит (за исключением того, что на этот раз я сгенерировал разные назначения для b
- f
).
int a = 194;
int d1 = a / 100;
int d2 = (a / 10) % 10;
int d3 = a % 10;
int a = d1 * 100 + d2 * 10 + d3 * 1; // 194
int b = d1 * 100 + d3 * 10 + d2 * 1; // 149
int c = d2 * 100 + d1 * 10 + d3 * 1; // 914
int d = d2 * 100 + d3 * 10 + d1 * 1; // 941
int e = d3 * 100 + d1 * 10 + d2 * 1; // 419
int f = d3 * 100 + d2 * 10 + d1 * 1; // 491
Использовать механизм next_permutation()
; он будет обобщать до 4-значных и 5-значных и N-значных чисел, если это не так.