Java >> Tutoriel Java >  >> Java

Programme de nombres forts en Java

Si la somme de la factorielle des chiffres individuels d'un nombre est égale au même nombre, alors le nombre est appelé un nombre fort. Dans cet article, nous allons développer un nombre fort programme en Java.

Exemple :-
145 =1 ! + 4 ! + 5 ! =1 + 24 + 120 =145
Donc, 145 est un nombre fort.

234 =2 ! + 3 ! + 4 ! =2 + 6 + 24 =32
Donc, 234 n'est pas un nombre fort.

40585 =4 ! + 0 ! + 5 ! + 8 ! + 5 ! =24 + 1 + 120 + 40320 + 120 =40585
Donc, 40585 est un nombre fort.

Procédure pour développer une méthode pour vérifier que le nombre est un nombre fort ou non
1) Prendre un nombre en entrée
2) Prendre une variable somme et l'initialiser avec 0
3) Trouver le dernier chiffre du nombre
4) Calculer la factorielle de ce dernier chiffre
5) Ajouter le résultat factoriel dans la somme
6) supprimer le dernier chiffre du nombre
7) Répéter les étapes 3 pour 6 jusqu'à ce que le nombre devienne 0.
8) Si la somme est égale à l'entrée (nombre), alors c'est un nombre fort

La méthode Java pour vérifier que le nombre est un nombre fort ou non, peut être écrite comme ci-dessous :-

public static boolean isStrong(int number) {

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

   //store number in a temporary variable
   int tempNum = number;

   // traverse through all digits of number
   while(tempNum != 0) {

       // find last digit
       lastDigit = tempNum % 10;

       // calculate factorial and 
       // add it to the sum
       sum += factorial(lastDigit);

       // remove last digit
       tempNum /= 10;
   }

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

Nous stockons le nombre réel dans une variable temporaire car enfin, nous devons comparer le résultat (somme) avec le nombre réel. Si le résultat (somme) est égal au nombre réel, alors le nombre est un nombre fort, sinon ce n'est pas un nombre fort.

Voir également :- Numéro spécial, Numéro magique, Numéro Armstrong, Numéro parfait, Numéro maléfique, Numéro espion, Numéro ensoleillé en Java

Programme Java pour vérifier un nombre fort

Maintenant, sur la base de la méthode ci-dessus, nous allons développer un programme de nombres forts dans le langage de programmation Java. Nous développerons isStrong(-) méthode pour vérifier que le nombre est un nombre fort ou non et le factorial(-) méthode pour trouver la factorielle d'un nombre.

import java.util.Scanner;

public class StrongNumber {

   // Checks the number is strong number or not
   public static boolean isStrong(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; 
   }

   // 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;
   }

   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 strong number or not
      result = isStrong(number);
      if(result)
          System.out.println(number +
                  " is a strong number.");
      else
          System.out.println(number +
                 " is not a strong number");

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

La sortie pour différents cas de test :-

Entrez un nombre entier ::145
145 est un nombre fort.

Entrez un nombre entier ::146
146 n'est pas un nombre fort

Optimisation

Nous pouvons analyser que le dernier chiffre sera toujours de 0 à 9, et à chaque fois nous devons trouver la factorielle de 0 à 9 uniquement. Il est donc préférable de calculer la valeur factorielle de 0 à 9 et de la stocker dans un tableau. Pour les grands nombres, ce sera une solution optimisée pour vérifier que le nombre est un nombre fort ou non. Conclusion :- avant de vérifier si le nombre est un nombre fort ou non, calculez la factorielle de 0 à 9 et stockez-la dans un tableau. Cela peut être fait comme ci-dessous :-

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

// static block to calculate factorial
static {
   // factorial of 0 and 1 is 1
   fact[0] = fact[1] = 1;

   // factorial is also calculated as
   // n! = (n-1)! * n
   for(int i=2; i<fact.length; i++)
       fact[i] = fact[i-1] * i;
}

Le bloc statique s'exécute avant d'exécuter la méthode main donc, les valeurs factorielles de 0 à 9 seront calculées et stockées dans le tableau fact[]. Maintenant, à l'intérieur du isStrong() méthode pour la valeur factorielle utilise ce tableau comme,

// add factorial value of last digit
// to the sum variable
sum += fact[lastDigit];

Dans le programme Java ci-dessous, nous avons utilisé cette solution optimisée pour vérifier que le nombre est un nombre fort ou non.

Programme optimisé pour vérifier que le numéro est un nombre fort ou non

import java.util.Scanner;

public class StrongNumber {

   // 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;
   }
    
   // Checks the number is strong number or not
   public static boolean isStrong(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 and take input
      Scanner scan = new Scanner(System.in);
      System.out.print("Enter an integer number:: ");
      number = scan.nextInt();

      // check number is strong number or not
      result = isStrong(number);
      if(result)
         System.out.println(number +
                       " is a strong number.");
      else
         System.out.println(number +
                    " is not a strong number");

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

Trouver un nombre fort en Java dans une plage donnée

Nous pouvons également trouver tous les nombres forts en Java dans une plage donnée. Pour cela, nous devons prendre l'aide de boucles. Nous prendrons des valeurs de plage comme minRange et maxRange . Plus tard, nous trouverons tous les nombres forts qui appartiennent à cette gamme.

import java.util.Scanner;

public class StorngNumberInRange {

   // 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;
      }
   }

   // Checks the number is strong number or not
   public static boolean isStrong(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); 
   }

   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 the minimum value of range:: ");
      minRange = scan.nextInt();
      System.out.print("Enter the maximum value of range:: ");
      maxRange = scan.nextInt();

      // loop
      System.out.println("The Strong number from "+ 
              minRange + " to "+ maxRange+" are: ");
      for(int i=minRange; i<=maxRange; i++) {
          // check number
          if(isStrong(i))
              System.out.print(i +" ");
      }

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

Sortie :-

Saisissez la valeur minimale de la plage ::1
Saisissez la valeur maximale de la plage ::1000000
Les nombres forts de 1 à 1000000 sont :
1 2 145 40585


Balise Java