2012-12-08 28 views
8

Wie würde ich das in Java machen? Finden Sie heraus, ob eine Zahl durch 2 teilbar ist, wenn die letzte Ziffer gerade ist. (0,2,4,6,8) Beispiel: 128 ist, 129 ist nichtTesten von geraden Zahlen in Java ohne Modulo-Operator

+1

@AV.'% Kann nicht verwendet werden, um eine Antwort zu finden -> In Titel. –

+0

Neben dem optimaleren Bit-Test (für Fall 2) würde auch die Ganzzahl-Division (für andere Fälle als 2) funktionieren: "n == (n/2) * 2". –

+3

Und * warum * möchten Sie den Modulo Operator vermeiden? Zuallererst sollte Code lesbar sein und die * Absicht * des Programmierers beschreiben, also ist 'a% 2 == 0' * viel * aussagekräftiger als 'a & 1 == 0', was eine Eigenschaft des zugrundeliegenden Elements ausnutzt Binärdarstellung. – Heinzi

Antwort

5

sehen, ob das der am weitesten rechts stehende Bit 1 ist, dann ist es nicht, durch bitweisen Operatoren

führen logische und mit (für Beispiel)

yourNumber & 1 
5

überprüfen Sie das am wenigsten signifikante Bit:

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

LSB ist 0 für gerade Zahl und 1 für ungerade, genau wie für Dezimalzahlen mindestens signifi cant digit ist 0, wenn es durch 10 teilbar ist.

14

Mit der bitweisen Operation and

if((number&1) == 0) 

bitweise UND-Operator &

Die & (bitweise AND) Operator jedes Bit des ersten Operanden vergleicht die entsprechenden Bits des zweiten bis Operand. Wenn beide Bits 1 sind, wird das entsprechende Bit des Ergebnisses auf 1 gesetzt. Andernfalls setzt es das entsprechende Ergebnisbit auf 0 (source).

In den binären Format gerade Zahlen hat die Least Significant Bit gleich Null. Wenn Sie dies wissen und den Operator & verwenden, können Sie herausfinden, ob es gerade ist oder nicht.

Also braucht es eine Nummer ..abcdy und vergleicht mit ..00001 wenn y Null ist ..abcdy & ..00001 ist auch Null, also eine gerade Zahl.

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

Das ist cool .. Aber wie oft wird die While-Schleife ausgeführt, wenn Sie eine 15-20-stellige Nummer haben. Perfomance saugt .. Sie sollten lernen, die bessere Art, Dinge zu tun, obwohl sie schwer zu lernen sind. Nicht nur du, sondern generell als Programm.r – Stunner

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

Grund: Zahl ungerade ist, wenn das LSB 1 ist, und auch aus anderen Gründen. Wenn n | 1 erledigt ist, bleibt das LSB von ungeradzahlig gleich, so dass die resultierende Zahl nicht geändert wird, während LSB einer geraden Zahl 1 wird, wodurch die Anzahl geändert wird.

0

Teilen Sie die Zahl von und multiplizieren Sie die Antwort , wenn Sie Ihre ursprüngliche Zahl erhalten dann die Zahl „Selbst“ wenn nicht, dann ist die Zahl „Odd“

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"); 
} 

}

Verwandte Themen