2012-12-08 6 views
8

Come farei questo in Java? Trova se un numero è divisibile per 2, se l'ultima cifra è pari. (0,2,4,6,8) Esempio: 128 è, 129 non èTest per numeri pari in Java senza operatore modulo

+1

@AV.'Impossibile usare% per trovare la risposta' -> Nel titolo. –

+0

Oltre al test di bit più ottimale (per il caso 2), anche la divisione in interi dovrebbe essere eseguita (per altri casi rispetto a 2): 'n == (n/2) * 2'. –

+3

E * perché * vorresti evitare l'operatore modulo? Prima di tutto, il codice dovrebbe essere leggibile e descrivere l'* intento * del programmatore, quindi 'a% 2 == 0' è * molto * più espressivo di' a & 1 == 0', che sfrutta alcune proprietà del sottostante rappresentazione binaria. – Heinzi

risposta

5

vedere se la destra bit più la sua non è 1 allora in base operatori bit per bit

eseguire logico e con (per esempio)

yourNumber & 1 
5

Controllare il bit meno significativo:

boolean even = (x & 1) == 0; 

LSB è 0 per numero pari e dispari per 1, proprio come per i numeri decimali meno signifi La cifra può essere 0 se è divisibile per 10.

14

Utilizzare dell'operazione bit a bit and

if((number&1) == 0) 

Bitwise operatore &

L'(AND bit a bit) Operatore & confronta ogni bit del primo operando bit corrispondente del secondo operando. Se entrambi i bit sono 1, il bit corrispondente del risultato è impostato su 1. In caso contrario, imposta il bit di risultato corrispondente su 0 (source).

Nelle formato binario numeri pari ha il bit significativo almeno pari a zero. sapendo questo e utilizzando l'operatore & è possibile scoprire se è pari o meno.

Quindi ci vuole un numero ..abcdy e confronta con ..00001 se y è zero di ..abcdy & ..00001 è anche zero, quindi un numero pari.

0

Myway;)

public class Even_Odd {

/** 
* @param args 
*/ 
public static void main(String[] args) 
{ 
    int val=550; 
    // TODO Auto-generated method stub 
    while(val>=0) 
    { 
     if(val==1) 
     { 
      System.out.println("Odd Number"); 
     } 
     else if(val==0) 
     { 
      System.out.println("Even Number"); 
     } 

      val=val-2; 
     // System.out.println(val); 

    } 
} 

}

+0

Questo è bello .. Ma quante volte il ciclo while viene eseguito se si dispone di un numero di 15-20 cifre. La perfomance fa schifo. Dovresti imparare il modo migliore di fare le cose anche se sono difficili da imparare all'inizio. Non solo tu, ma in generale come un programma – Stunner

0
if((n|1)==n) 
    System.out.println("odd"); 
else 
    System.out.println("even"); 

Motivo: il numero è dispari se il LSB è 1, e anche in caso contrario. Quando n | 1 è fatto, LSB di dispari rimane lo stesso, quindi il numero risultante non viene modificato, mentre LSB di un numero pari diventa 1, cambiando così il numero.

0

dividere il numero da e moltiplicare la risposta , se si ottiene il numero originale, allora il numero è "Anche" se non allora il numero è "Dispari"

public class EvenOrOdd 
{ 
    public static void main(String args[]) 
    { 
     int value = 129; 

     if((value/2)*2==value) 
     { 
      System.out.println("The Given Number \""+value+"\" is Even"); 
     } 
     else 
     { 
      System.out.println("The Given Number \""+value+"\" is Odd"); 
     } 
    } 
} 
0
import java.io.*; 
import java.util.*; 
public class CheckNumber{ 
public static void main(String... args)throws IOException{ 

    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 

    System.out.println("Please enter the number to check even or odd"); 

    int number=Integer.parseInt(br.readLine()); 

    String temp=number+""; //convert number to string 

    char ch=temp.charAt(temp.length()-1); //get last character 

    temp=ch+""; 

    if(temp.equals("0") || temp.equals("2") || temp.equals("4") || temp.equals("6") || temp.equals("8")) //check last number is even 
     System.out.println("Number is even"); 
    else 
     System.out.println("Number is odd"); 
} 

}