숫자가 짝수인지 홀수인지 확인


128

주어진 숫자가 짝수인지 홀수인지 어떻게 알 수 있습니까? 나는 이것을 오랫동안 오랫동안 이해하고 싶었고 아무데도 얻지 못했습니다.

답변:


200

모듈러스 연산자를 사용할 수 있지만 속도가 느릴 수 있습니다. 정수인 경우 다음을 수행 할 수 있습니다.

if ( (x & 1) == 0 ) { even... } else { odd... }

낮은 비트는 항상 홀수로 설정되기 때문입니다.


23
사람들이 단순히 숫자의 첫 번째 비트를 확인하는 것보다 모듈러스를 선호한다는 것은 여전히 ​​놀랍습니다. 첫 번째 비트가 설정되면 숫자는 홀수 여야합니다. 그것은 일반적으로 더 빠르며 내 의견으로는 읽습니다. 다른 사람들이 모듈러스보다 선호하지 않는 이유는 이진에 대한 이해가 부족하기 때문입니다.
호감

5
@dtech 나는 당신이 조기 최적화의 의미를 오해한다고 생각합니다. 한 방법이 다른 방법보다 성능이 우수하다는 것을 미리 알고 있다면 더 성능이 좋은 방법을 사용하는 것이 조기 최적화가 아닙니다. 지능적입니다. 즉, 내 의견은 단순히 짝수 / 홀수를 확인할 때 첫 번째 비트를 검사하는 것이 모듈러스를 사용하는 것보다 더 논리적 인 방법에 관한 것입니다. 문제는 많은 프로그래머들이 두 가지 방법이 무엇을하는지 이해하지 못하고 튜토리얼을 따르기 만한다는 것입니다.
호감

54
@crush는 n % 2 == 0의미 상 의미를 의미하며 Divide by 2 and check if the remainder is 0, 이는 의미 보다 훨씬 명확 n & 1 == 0합니다 Zero all the bits but leave the least significant bit unchanged and check if the result is 0. 첫 번째의 향상된 선명도는 (아마도 존재하지 않는) 오버 헤드 가치가 있습니다. 그것이 바로 조기 최적화의 의미입니다. 뭔가 느리고 당신이 변화하는 부분에 프로필 경우 n % 2n & 1확실히 정당화하지만, 사전에 그 일을하지 않습니다. 일반적으로 비트 연산자로 작업하는 것은 프로파일 링 전에 나쁜 생각입니다.
dtech

18
@dtech 우선, 귀하의 의견은 완전히 주관적입니다. 둘째, 여전히 "조기 최적화"의 의미를 이해하지 못합니다. 그것은 미세 최적화입니다. 조기 최적화가 아닙니다. 조기 최적화는 기존 코드를 먼저 프로파일 링하지 않고 "최적화"로 기존 코드를 수정하여 비효율적인지 확인합니다. 그러나 사전에 한 가지 방법과 다른 방법으로 코드를 작성하는 것이 더 효율적이고 더 효율적인 코드를 사용하도록 선택하는 것은 조기 최적화가 아닙니다. 그것은 당신의 주관적인 의견입니다 n % 2 == 0입니다 청소기 보다 n & 1 == 0.
호감

15
나는 여기에 오는 사람들에게 모듈로 연산자를 사용하는 것이 좋다고 지적하고 싶지만, 그것을 사용하여 홀수를 테스트하는 경우, n % 2! = 0이 아니라 n % 2! = 0을 쓰십시오. Java에서 음수에는 작동하지 않습니다.
Jxek


30

2로 나눌 때 나머지가 0이면 짝수입니다. %나머지를 얻는 연산자입니다.


12
% 연산자를 모듈로라고합니다.
Anthony

4
@Anthony : 실제로 "remainder operator" 입니다.
라이언 스튜어트

3
수학적 용어는 모듈러스이며 나머지를 얻는 것보다 더 넓게 적용됩니다. (A % B)그 자체가 표현으로 사용될 수 있으며, 그 때 일이 재미있어집니다.
Stefan Kendall

2
@ 스테판 : 나는 요점을 설명하지 않지만, 수학자들은 모듈 식 산술 에서 모듈러스와 나머지 는 같은 것이 아니라고 지적하는 경향이 있습니다.
Ryan Stewart

2
@StefanKendall Java 언어 사양 # 15.17.3을 확인하십시오 . Google은 규범적인 참조가 아닙니다.
Lorne의 후작

24

나머지 연산자 %는 숫자로 나눈 나머지를 제공합니다.

따라서 n % 2 == 0n이 짝수이면 true이고 n이 홀수이면 false입니다.


21

모든 짝수는 10 진수인지 여부에 관계없이 2로 나눌 수 있습니다 (그러나 존재하는 경우 소수도 짝수 여야 함). 따라서 %왼쪽의 숫자를 오른쪽의 숫자로 나누고 나머지를 반환하는 (모듈로) 연산자를 사용할 수 있습니다 .

boolean isEven(double num) { return ((num % 2) == 0); }

1
'소수점에 관계없이'는 의미가 없습니다. 십진수는 기수입니다. '소수 부분을 포함한다'는 뜻입니까?
Lorne의 후작

4

나는 추천 할 것이다

Java Puzzlers : Joshua Bloch와 Neal Gafter의 함정, 함정 및 코너 케이스

숫자가 홀수인지 확인하는 방법에 대한 간단한 설명이 있습니다. 첫 번째 시도는 @AseemYadav가 시도한 것과 비슷한 것입니다.

public static boolean isOdd(int i) {
     return i % 2 == 1;
}

그러나 책에서 언급했듯이 :

나머지 연산이 0이 아닌 결과를 반환하면 왼쪽 피연산자와 동일한 부호를 갖습니다.

일반적으로 음수가 홀수 인 경우 대신에 결과를 1얻습니다 . 따라서 @Camilo 솔루션을 사용하거나 다음을 수행 할 수 있습니다.-1i%2

public static boolean isOdd(int i) {
     return i % 2 != 0;
}

그러나 일반적으로 가장 빠른 솔루션은 위의 @lucasmo write와 같은 AND 연산자를 사용하는 것입니다.

public static boolean isOdd(int i) {
     return (i & 1) != 0;
}

@Edit 그것은 또한 Math.floorMod(int x, int y);배당금을 마이너스로 다루는 것이 좋으나 -1제수가 마이너스이면 돌아올 수도 있음 을 지적 할 가치가 있습니다.


2

양수 또는 음수에 적용

int start = -3;
int end = 6;

for (int val = start; val < end; val++)
{
    // Condition to Check Even, Not condition (!) will give Odd number
    if (val % 2 == 0) 
    {
        System.out.println("Even" + val);
    }
    else
    {
        System.out.println("Odd" + val);
    }
}

2

최하위 비트 (가장 오른쪽)를 사용하여 숫자가 짝수인지 홀수인지 확인할 수 있습니다. 모든 홀수 숫자의 경우 맨 오른쪽 비트는 항상 이진 표현에서 1입니다.

public static boolean checkOdd(long number){
   return ((number & 0x1) == 1);
}

2

이 다음 프로그램은 많은 수를 처리 할 수 ​​있습니다 (20보다 큰 자릿수)

package com.isEven.java;
import java.util.Scanner;

public class isEvenValuate{

public static void main(String[] args) {            

        Scanner in = new Scanner(System.in);
        String digit = in.next();

        int y = Character.getNumericValue(digit.charAt(digit.length()-1));

        boolean isEven = (y&1)==0;

        if(isEven)
            System.out.println("Even");
        else
            System.out.println("Odd");

    }
}

출력은 다음과 같습니다 ::

  122873215981652362153862153872138721637272
  Even

1

모듈러스 연산자를 사용할 수 있지만 속도가 느릴 수 있습니다. 더 효율적인 방법은 숫자가 짝수인지 홀수인지를 결정하므로 가장 낮은 비트를 확인하는 것입니다. 코드는 다음과 같습니다.

public static void main(String[] args) {        
    System.out.println("Enter a number to check if it is even or odd");        
    System.out.println("Your number is " + (((new Scanner(System.in).nextInt() & 1) == 0) ? "even" : "odd"));        
}

1

당신은 이렇게 할 수 있습니다 :

boolean is_odd(int n) {
    return n % 2 == 1 || n % 2 == -1;
}

Java가 모듈로 연산에서 배당의 부호 인 왼쪽을 갖기 때문입니다. n. 따라서 마이너스와 포지티브 배당의 경우 모듈로에 부호가 있습니다.

물론 비트 단위 연산은 더 빠르고 최적화됩니다. 간단히 2 ~ 3 개의 짧은 단어로 코드 라인을 문서화하면 가독성이 향상됩니다.


이를 모듈로 연산자가 아닌 나머지 연산자 라고합니다 .
Lorne의 후작

1

if / else 조건을 사용하지 않고 쉽게 수행 할 수있는 또 다른 방법 (양수와 음수 모두 가능) :

int n = 8;
List<String> messages = Arrays.asList("even", "odd");

System.out.println(messages.get(Math.abs(n%2)));

홀수의 경우 표현식은 나머지로 '1'을 반환하여

messages.get (1) = 'odd'및 'odd'인쇄

그렇지 않으면 표현식에 결과 '0'이 표시 될 때 '짝수'가 인쇄됩니다.


1
이 질문은 JAVA로 태그되었습니다. Python에 답변을 게시했습니다. 그다지 유용하지는 않습니다.
Mark

안녕 @ 마크! 지적 해 주셔서 감사합니다. 답을 수정했습니다. 이번에는 누군가에게 여전히 도움이 될 수 있기를 바랍니다.
Aseem Yadav

1
예를 들어 다음과 같이 쉽게 충돌 할 수 있습니다 int n = -3;. @Camilo가 아래에 언급했듯이-나머지 연산이 0이 아닌 결과를 반환하면 왼쪽 피연산자와 같은 부호를 가지므로 일반적으로 우리 System.out.println(messages.get(-1));에게 제공하는 것java.lang.ArrayIndexOutOfBoundsException
Michu93

1

주어진 숫자의 계수가 0과 같으면, 그 숫자는 홀수입니다. 그 방법은 다음과 같습니다.

public void evenOrOddNumber(int number) {
  if (number % 2 == 0) {
    System.out.println("Number is Even");
   } else {
    System.out.println("Number is odd");
  }
 }

0
package isevenodd;
import java.util.Scanner;
public class IsEvenOdd {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter number: ");
        int y = scan.nextInt();       
        boolean isEven = (y % 2 == 0) ? true : false;
        String x = (isEven) ? "even" : "odd";  
        System.out.println("Your number is " + x);
    }
}

'의 목적은 무엇입니까? 표시
Rana Talha Tariq

0

다음은 주어진 숫자가 짝수인지 홀수인지 확인하는 예입니다.

import java.util.Scanner;

public class EvenOdd
{
   public static void main(String[] args)
   {
      int a;
      System.out.println("Please enter a number to check even or odd:");
      Scanner sc = new Scanner(System.in);
      a = sc.nextInt();

      if(a % 2 == 0)
      {
         System.out.println("Entered number is an even number");
      }
      else
      {
         System.out.println("Entered number is an odd number");
      }
   }
}

이를 결정하는 방법에는 여러 가지가 있습니다. 주어진 숫자가 짝수인지 홀수인지 더 많은 예제를 보려면 리소스를 참조하십시오 .


0

전체 예는 다음과 같습니다.

import java.text.ParseException;

public class TestOddEvenExample {
    public static void main(String args[]) throws ParseException {

        int x = 24;
        oddEvenChecker(x);

        int xx = 3;
        oddEvenChecker(xx);
    }

    static void oddEvenChecker(int x) {
        if (x % 2 == 0)
            System.out.println("You entered an even number." + x);
        else
            System.out.println("You entered an odd number." + x);
    }
}

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.