2017-11-22 16 views
2

두 개의 숫자가 동일한 패리티 (둘 다 홀수이거나 둘다 짝수인지)를 확인하는 두 가지 해결책을 찾았습니다. C++, 그들은 다음과 같이 :두 숫자의 패리티가 같은지 확인하는 올바른 방법은 무엇입니까?

if ((a+b)%2 == 0) 

if (a%2 == b%2) 

문제는 첫 번째는 (시험 백가지 경우 % 만의 경우 80 %에 두 번째에서 작동한다는 것입니다 내가 웹 사이트에서 제출 한 문제에 대해) 나는 왜 그런지 이해하지 못합니다. 나에게있어서, 두 줄의 코드는 모든 경우에 잘 작동해야한다. 누군가 제게 코드의 첫 번째 줄이 모든 경우에 작동하고 두 번째 줄이 왜 작동하지 않는지 설명 할 수 있습니까? 그리고 어떤 방법 (저에게 보여 주었던 방법)을 추천할까요?

+1

# 2가 작동하지 않는 테스트 케이스를 제공 할 수 있습니까? –

+0

이 문제에 대한 테스트를 볼 수 없으며 두 번째 명령문이 작동하지 않는 용지에 어떤 케이스도 찾을 수 없습니다. –

+0

'a'와'b'는 어떤 타입입니까? – 1201ProgramAlarm

답변

3

나는 당신이이 대신 중 하나를 사용해야합니다, 게시물의 방법 중 하나를 권하고 싶지 않다 : 이들은 심지어 부정적인 경우 0, 홀수 값으로 설정됩니다 비트 사실에 의존

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 

합니다. 가능하면 정수 나누기 (및 모듈로)를 피하십시오. CPU에서 가장 느린 명령어 중 하나입니다.