Java >> Java tutorial >  >> Java

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


Java tag