Я нашел два решения, чтобы выяснить, имеют ли два числа одинаковую четность (оба нечетные числа или оба четные). В C ++ они выглядят так:
if ((a+b)%2 == 0)
а также
if (a%2 == b%2)
Проблема в том, что первый работает в 100% случаев, а второй только в 80% случаев (тесты проблемы, которые я представил на веб-сайте), и я не понимаю, почему. Для меня обе строки кода должны нормально работать во всех случаях. Может кто-нибудь объяснить мне, почему первая строка кода работает во всех случаях, а вторая — нет? И какой метод (показанный мной или другим) вы бы порекомендовали?
Я не рекомендовал бы ни один из методов в вашем посте, вы должны использовать один из них:
if ((a & 1) == (b & 1)) {} // this is clearer
if (((a ^ b) & 1) == 0) {} // this is faster
if (!((a ^ b) & 1)) {} // this is as fast as faster
Они зависят от того факта, что бит 0 будет установлен для нечетных значений, даже если они отрицательные. По возможности избегайте целочисленного деления (и по модулю), это одна из самых медленных инструкций на любом процессоре.
Других решений пока нет …