Maison > développement back-end > C++ > Vérifier si un numéro est un numéro de Munchhausen

Vérifier si un numéro est un numéro de Munchhausen

PHPz
Libérer: 2023-09-05 22:01:07
avant
1222 Les gens l'ont consulté

Vérifier si un numéro est un numéro de Munchhausen

Le nombre de Munchhausen est un nombre impair doté de propriétés uniques. Un nombre est considéré comme un nombre de Munchhausen si la somme de ses chiffres (ses puissances) est égale au nombre d'origine. Ces chiffres sont rares et beaucoup d’entre eux sont inconnus. Si la définition 00 = 0 est utilisée, alors 0 peut également être considéré comme le nombre de Munchhausen.

L'article suivant fournit un moyen de déterminer si un nombre est un nombre de Munchhausen, en gardant à l'esprit ces caractéristiques des nombres de Munchhausen.

Énoncé du problème

La tâche actuelle consiste à vérifier si un entier n donné est un nombre de Münchhausen, c'est-à-dire que lorsque chaque nombre est élevé à sa propre puissance et additionné, le résultat est égal au nombre d'origine. S'il s'agit d'un numéro de Münchhausen, le programme doit renvoyer vrai, sinon il doit renvoyer faux.

Exemple

Input: 1
Output: True
Copier après la connexion

Explication - (1 à la puissance 1) = 11 = 1.

Puisque le nombre obtenu est égal au nombre d'origine, 1 est le nombre de Munchhausen.

Input: 1603
Output: False
Copier après la connexion

Explication − (1 à la puissance 1) + (6 à la puissance 6) + (0 à la puissance 0) + (3 à la puissance 3) = 1< super>1 + 66 + 00 + 33 ≠ 1603.

Cela équivaut à 46684. Puisque le nombre obtenu n’est pas égal au nombre d’origine, 1603 n’est pas un nombre de Munchhausen.

Input: 3435
Output: True
Copier après la connexion

Explication − (3 à la puissance 3) + (4 à la puissance 4) + (3 à la puissance 3) + (5 à la puissance 5) = 3< super>3 + 44 + 33 + 55 = 3435.

Puisque le nombre obtenu est égal au nombre d'origine, 3435 est le nombre de Munchhausen.

Input: 4335
Output: False
Copier après la connexion

Explication − (4 à la puissance 4) + (3 à la puissance 3) + (3 à la puissance 3) + (5 à la puissance 5) = 44 + 33 + 33 + 55 ≠ 4335.

Puisque le nombre obtenu n'est pas égal au nombre d'origine, 4335 n'est pas un numéro de Munich.

Méthode de solution

Afin de savoir si le numéro fourni est un numéro de Münchhausen, nous devons savoir si le résultat de l'ajout de chaque numéro à lui-même est le même que le numéro d'origine. Vous pouvez utiliser les méthodes suivantes pour calculer la somme et déterminer si le résultat correspond au nombre d'origine.

Algorithme

La méthode comprend les étapes suivantes -

  • Divisez le numéro donné en ses chiffres individuels.

  • Élevez chaque numéro vers lui-même.

  • Ajouter des résultats.

  • Comparez la somme au nombre d'origine.

  • Afficher les réponses.

pseudocode

Fonction is_munchhausen()

  • Initialiser la somme = 0

  • Initialiser temp = n

  • simultanément (température > 0)

    Initialiser le chiffre = temp % 10

    somme = somme + pow(nombre, nombre)

    Température=Température/10

  • Somme de retour ==n

Fonction principale()

  • Initialiser n

  • si (is_munchhausen())

    cout <<"Numéro de Münchhausen"<<“明希豪森数”

  • Autres

    cout << « Numéro Hausen non sectaire »

  • Impression

Exemple : programme C++

Le programme détermine si un numéro est un numéro de Münchhausen en appelant la fonction is_munchhausen(). Cette fonction utilise une variable temporaire égale à n et une autre variable somme pour stocker la somme des résultats de chaque nombre additionnés sur lui-même.

À chaque itération de la boucle, utilisez l'opérateur « % » pour accéder à chaque chiffre de la température. Il renvoie le chiffre le plus à droite du nombre. Ce nombre est ensuite augmenté et ajouté au total. A la fin de chaque itération, temp est divisé par 10 pour accéder au numéro suivant. La boucle s'exécute jusqu'à ce que temp > 0.

// C++ code for Münchhausen Number
#include <iostream>
#include <cmath>

using namespace std;
// this function is used to check out whether the given number is Münchhausen Number or not
bool is_munchhausen(int n){
   int sum = 0;
   int temp = n;
   while (temp > 0){
      int digit = temp % 10; //yields the rightmost digit as remainder
      sum = sum + pow(digit, digit);
      temp = temp / 10; // yields the remaining number
   }
   return (sum == n); // returns true if sum is equal to original number
}
// Driver Code
int main(){
   int n = 3253;
   cout << "input number: " << n << endl;
   if (is_munchhausen(n)){
      cout << "Münchhausen Number" << endl;
   } else {
      cout << "Non-Münchhausen Number" << endl;
   }
   return 0;
}
Copier après la connexion

Sortie

input number: 3253
Non-Münchhausen Number
Copier après la connexion

Analyse de la complexité temporelle et spatiale

Time Complexity - O (log n) complexité temporelle, où n est la valeur du paramètre d'entrée. En effet, le nombre d'itérations de la boucle while dans la fonction is_munchhausen() dépend du nombre de chiffres du nombre donné, qui est proportionnel à log(n) base 10. Cette fonction n'est appelée qu'une seule fois dans la fonction principale, la complexité globale du programme est donc proportionnelle à log(n).

Complexité spatiale - O(1). Cette fonction utilise une mémoire fixe pour stocker les variables entières sum et temp, de sorte que sa complexité spatiale est constante quelle que soit la taille des arguments d'entrée.

Conclusion

Pour résumer, un nombre de Münchhausen est un nombre unique exprimé comme la somme de ses propres nombres. Ils ne sont pas courants et les trouver peut être une tâche difficile. La solution discutée dans cet article fournit un moyen de vérifier facilement si un nombre est Münchhausen en temps logarithmique sans utiliser d'espace auxiliaire. Cet article explique en profondeur le concept de nombre de Munchhausen à l'aide de divers exemples. Utilisez le code C++ inclus pour déterminer rapidement si un nombre donné est un nombre de Münchhausen.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal