Java >> Java tutorial >  >> Java

Specialnummer i Java

I dette indlæg vil vi skrive et Java-program for at kontrollere, om det givne nummer er et specialnummer eller ej? Vi vil også udvikle et Java-program til at vise alle de specielle numre, der findes i det givne interval.

Hvis summen af ​​fakultetet af alle cifre i et tal er lig med det oprindelige tal, kaldes tallet Special Number. For eksempel:- 145 og 40585 er Krishnamurthy-tal.

145
=> 1! + 4! + 5!
=> 1 + 24 + 120
=> 145
Summen af ​​fakultetet af individuelle cifre er den samme som det oprindelige tal 145. Derfor er 145 et særligt tal.

Tilsvarende
40585
=> 4! + 0! + 5! + 8! + 5!
=> 24 +1 + 120 + 40320 + 120
=> 40585
Så 40585 er også et specialnummer

1! =1
Så 1 er også et særligt tal.

Tilsvarende
2! =1*2 =2
2 er også et særligt tal.

Derfor er tallene 1, 2, 145 og 40585 eksempler på specialnummer.

Nogle gange kaldes det specielle nummer også for et stærkt nummer, Krishnamurthy-nummer og Peterson-nummer.

Fremgangsmåde for at udvikle en metode til at kontrollere, om tallet er et særligt nummer eller ej

1) Tag et tal som input
2) Tag en sumvariabel og initialiser den med 0
3) Find det sidste ciffer i tallet
4) Beregn faktor for det sidste ciffer
5) Tilføj faktorresultat i summen
6) fjern det sidste ciffer fra tallet
7) Gentag trin 3 til 6, indtil tallet bliver 0.
8) Hvis summen er lig til input (nummer) så er det et Specialnummer

import java.util.Scanner;

public class SpecialNumber {

   // method to Check the Special number
   public static boolean isSpecial(int number) {

      // declare variables
      int sum = 0, lastDigit = 0;
      int tempNum = number;

      // traverse through all digits of number
      while(tempNum != 0) {
          lastDigit = tempNum % 10;
          sum += factorial(lastDigit);
          tempNum /= 10;
      }

      // compare sum and number
      if(sum == number)
          return true; 
      return false; 
   }

   // method to calculate factorial of an integer
   public static long factorial(int n) {
      long fact = 1;
      for(int i=1; i<=n; i++) {
          fact *= i;
      }
      return fact;
   }

   // main method
   public static void main(String[] args) {

      // declare variables
      int number = 0;
      boolean result = false;

      //create Scanner class object to take input
      Scanner scan = new Scanner(System.in);

      // take input from end-user
      System.out.print("Enter an integer number::");
      number = scan.nextInt();

      // check number is Special number or not
      result = isSpecial(number);

      // display result
      if(result)
          System.out.println(number +
                  " is a Special number.");
      else
          System.out.println(number +
                 " is not a Special number.");

      // close Scanner class object
      scan.close();
   }
}

Outputtet for de forskellige testcases er:-

Indtast et heltal::1
1 er et særligt tal.

Indtast et heltal::145
145 er et særligt tal.

Indtast et heltal::200
200 er ikke et særligt tal.

Se også:- Specialnummer, Magisk nummer, Armstrong-nummer, Perfekt nummer, Evil Number, Spionnummer, Sunny-nummer i Java

Optimering

Vi kan analysere, at det sidste ciffer altid vil være fra 0 til 9, og hver gang skal vi kun finde faktortallet fra 0 til 9. Så det er en bedre idé at beregne faktorværdien fra 0 til 9 og gemme den i et array. For de store tal vil det være en optimeret løsning til at kontrollere, om nummeret er et Specialnummer eller ej. Konklusion:- før du kontrollerer, om tallet er et særligt tal eller ej, skal du beregne faktor fra 0 til 9 og gemme det i et array.

Den statiske blok udføres før hovedmetoden udføres, så faktorværdierne fra 0 til 9 skal beregnes og lagres i array-faktumet[].

I nedenstående Java-program brugte vi denne optimerede løsning til at kontrollere, om tallet er et specielt nummer eller ej.

import java.util.Scanner;

public class SpecialNumber {

    // Array to store factorial value 
    // from 0 to 9
    static int fact[] = new int[10];

    // static block to calculate factorial
    static {
	    fact[0] = fact[1] = 1;
	    for(int i=2; i<fact.length; ++i)
		fact[i] = fact[i-1] * i;
    }

    // method to Check Special number
    public static boolean isSpecial(int number) {

	// declare variables
        int sum = 0, lastDigit = 0;
	int tempNum = number;

	// traverse through all digits of number
	while(tempNum != 0) {
	   lastDigit = tempNum % 10;
	   sum += fact[lastDigit];
	   tempNum /= 10;
	}

        // compare sum and number
        return (sum == number);
    }

    // main method
    public static void main(String[] args) {

      // declare variables
      int number = 0;
      boolean result = false;

      //create Scanner class object to take input
      Scanner scan = new Scanner(System.in);

      // take input from end-user
      System.out.print("Enter an integer number:: ");
      number = scan.nextInt();

      // check number is Special number or not
      result = isSpecial(number);

      // display result
      if(result)
          System.out.println(number +
                  " is a Special number.");
      else
          System.out.println(number +
                 " is not a Special number.");

      // close Scanner class object
      scan.close();
   }
}

Java-program til at finde alle specialnumre i et område

import java.util.Scanner;

public class SpecialNumberInRange {

    // Array to store factorial value 
    // from 0 to 9
    static int fact[] = new int[10];

    // static block to calculate factorial
    static {
      fact[0] = fact[1] = 1;
      for(int i=2; i<fact.length; ++i)
         fact[i] = fact[i-1] * i;
    }

    // method to Check Special number
    public static boolean isSpecial(int number) {

	// declare variables
        int sum = 0, lastDigit = 0;
	int tempNum = number;

	// traverse through all digits of number
	while(tempNum != 0) {
	   lastDigit = tempNum % 10;
	   sum += fact[lastDigit];
	   tempNum /= 10;
	}

        // compare sum and number
        return (sum == number);
    }

    // main method
    public static void main(String[] args) {

        // declare variables
        int minRange = 0, maxRange = 0;

        //create Scanner class object to take input
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter minimum value of range:");
        minRange = scan.nextInt();
        System.out.print("Enter maximum value of range:");
        maxRange = scan.nextInt();

        // loop
        System.out.println("The Special number from "+ 
                minRange + " to "+ maxRange+" are: ");

        for(int i=minRange; i<=maxRange; i++) {
            // check number
            if(isSpecial(i))
                System.out.print(i +" ");
        }

        // close Scanner class object
        scan.close();
   }
}

Output:-

Indtast minimum værdi af interval:1
Indtast maximum værdi af interval:1000000
Det særlige tal fra 1 til 1000000 er:
1 2 145 40585


Java tag