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
risposta
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
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
.
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.
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);
}
}
}
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
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.
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");
}
}
}
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");
}
}
@AV.'Impossibile usare% per trovare la risposta' -> Nel titolo. –
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'. –
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