Evil Number Program i Java
I dette indlæg vil vi udvikle et Java-program til at kontrollere, om det givne tal er et ondt tal eller ej. Vi vil også udvikle et Java-program til at finde alle onde tal i et givet område.
Et ondt tal er et positivt helt tal, der har et lige tal på 1'ere i sin binære ækvivalent. Eksempel:Den binære ækvivalent af 9 er 1001, og 1001 indeholder lige tal af 1'ere, så 9 er et ondt tal.
Procedure for at kontrollere, at det givne tal er et ondt tal eller ej
1) Tag et tal
2) Find dets binære ækvivalent, og gem det i en variabel "binært"
3) Tæl antallet af 1'ere i binæren
4) Hvis antallet af 1'ere er lige, er det et ondt tal, ellers er det givne tal ikke et ondt tal.
Vi kan konvertere decimaltal til binært tal manuelt, eller vi kan tage hjælp af den indbyggede metode tilBinaryString()-metoden.
Det første program vil vi udvikle ved at konvertere decimaltal til binært tal manuelt ved at bruge loops, og derefter vil det andet program blive udviklet ved at bruge toBinaryString() metoden.
import java.util.Scanner;
public class EvilNumber {
// method to check evil number
public static boolean isEvil(int number) {
// convert number into binary equivalent
long binary = toBinary(number);
// count number of 1's in binary number
int count = 0;
// iterate each digit of binary number
while(binary!=0) {
// check last digit is 1
if(binary%10 == 1)
count++;
// remove last digit
binary /= 10;
}
// check number of 1's
if(count%2 == 0)
return true;
// else return false
return false;
}
private static long toBinary(int decimal) {
long binary = 0;
int remainder = 0;
int i = 1;
while(decimal != 0) {
remainder = decimal % 2;
binary += remainder * i;
decimal /= 2;
i *= 10;
}
return binary;
}
public static void main(String[] args) {
// declare variables
int number = 0;
// read the input
Scanner scan = new Scanner(System.in);
System.out.print("Enter an integer number:: ");
number = scan.nextInt();
// check the number is evil number or not
if(isEvil(number))
System.out.println(number+" is an"
+ " evil number");
else
System.out.println(number+" is not an"
+ " evil number");
// close Scanner class object
scan.close();
}
}
Outputtet for de forskellige testcases er:-
Indtast et heltal::2
2 er ikke et ondt tal
Indtast et helt tal::3
3 er et ondt tal
Indtast et heltal::9
9 er et ondt tal
Se også:- Specialnummer, Magisk nummer, Armstrong-nummer, Perfekt nummer, Evil Number, Spionnummer, Sunny-nummer i Java
Brug af metoden toBinaryString()
For at konvertere decimaltallet til binært tal kan vi også bruge metoden toBinaryString() i Integer-klassen. Prototypen af toBinaryString()-metoden er:-
public static String toBinaryString(int i)
Det er en statisk metode for Integer-klassen, så det er ikke nødvendigt at oprette objektet for Integer-klassen. Vi kan få direkte adgang til det ved at kalde gennem klassenavnet som Integer.toBinaryString().
Det returnerer en strengrepræsentation af heltalsargumentet som et heltal uden fortegn i grundtal 2. Heltalsværdien uden fortegn er argumentet plus 2^32, hvis argumentet er negativt; ellers er det lig med argumentet. Denne værdi konverteres til en streng af ASCII-cifre i binær (basis 2) uden ekstra indledende 0'er. Værdien af argumentet kan gendannes fra den returnerede streng s ved at kalde Integer.parseUnsignedInt(s, 2).
import java.util.Scanner;
public class EvilNumber {
// method to check evil number using String
public static boolean isEvil(int number) {
// convert number into binary equivalent,
// toBinaryString() method is given to
// convert decimal to binary
String binary = Integer.toBinaryString(number);
// count number of 1's
int count = 0;
// iterate each character of String
for(int i=0; i<binary.length(); i++) {
// check each character is 1 or not
if(binary.charAt(i) == '1')
count++;
}
// check number of 1's
if(count%2 == 0)
return true;
// else return false
return false;
}
public static void main(String[] args) {
// declare variables
int number = 0;
// read the input
Scanner scan = new Scanner(System.in);
System.out.print("Enter an integer number:: ");
number = scan.nextInt();
// check the number is evil number or not
if(isEvil(number))
System.out.println(number+" is an"
+ " evil number");
else
System.out.println(number+" is not an"
+ " evil number");
// close Scanner class object
scan.close();
}
}
Java-program til at finde alle Evil-numre i et givet område
Vi kan også finde alle de onde tal, der findes i det givne område. Til dette formål skal vi bruge en løkke. Du kan konvertere decimal til binær manuelt, eller du kan bruge toBinaryString()-metoden.
import java.util.Scanner;
public class EvilNumberInRange {
// method to check evil number using String
public static boolean isEvil(int number) {
// convert number into binary equivalent,
// toBinaryString() method is given to
// convert decimal to binary
String binary = Integer.toBinaryString(number);
// count number of 1's
int count = 0;
// iterate each character of String
for(int i=0; i<binary.length(); i++) {
// check each character is 1 or not
if(binary.charAt(i) == '1')
count++;
}
// check number of 1's
if(count%2 == 0)
return true;
// else return false
return false;
}
public static void main(String[] args) {
// declare variables
int minRange = 0, maxRange = 0;
// create Scanner class object
Scanner scan = new Scanner(System.in);
// read inputs
System.out.print("Enter min value of range:: ");
minRange = scan.nextInt();
System.out.print("Enter max value of range:: ");
maxRange = scan.nextInt();
// find all Evil numbers
System.out.println("The evil numbers from "+
minRange+" to "+ maxRange+" are:: ");
for(int i=minRange; i<=maxRange; i++) {
if(isEvil(i))
System.out.print(i+" ");
}
// close Scanner class object
scan.close();
}
}
Outputtet for de forskellige testcases er:-
Indtast min. værdi for interval::1
Indtast maks. værdi for interval::50
De onde tal fra 1 til 50 er::3 5 6 9 10 12 15 17 18 20 23 24 27 29 30 33 34 36 39 40 43 45 46 48
Indtast min. værdi for interval::50
Indtast maks. værdi for interval::100
De onde tal fra 50 til 100 er::51 53 54 57 58 60 63 65 66 68 71 72 75 77 78 80 83 85 86 89 90 92 95 96 99