Как поменять местами два числа без использования временных переменных или арифметических операций? - PullRequest
35 голосов
/ 05 сентября 2010

Это уравнение заменяет два числа без временной переменной, но использует арифметические операции:

a = (a+b) - (b=a);

Как я могу сделать это без арифметических операций?Я думал о XOR.

Ответы [ 12 ]

0 голосов
/ 03 августа 2015

В дополнение к вышеупомянутым решениям для случая, когда, если одно из значений выходит за пределы диапазона для целого числа со знаком, значения двух переменных можно поменять местами следующим образом

a = a+b;
b=b-(-a);
a=b-a;
b=-(b);
0 голосов
/ 06 сентября 2010

Просто используйте что-нибудь еще, например, переменная, которая не является временной. Например,

int main (int argc, char** argv) {
   int a = 5; int b = 6;
   argc = a; a = b; b = argc;
}

В конце концов, вопрос не в том, чтобы показать разумный способ сделать это (c=a;a=b;b=c). Это значит, что вы можете мыслить нестандартно или, по крайней мере, скопировать ответ того, кто может.

...