Maison > développement back-end > C++ > En C++, la traduction de « nombre frugal » est « nombre frugal »

En C++, la traduction de « nombre frugal » est « nombre frugal »

王林
Libérer: 2023-09-12 10:53:02
avant
1059 Les gens l'ont consulté

在C++中,"Frugal Number"的翻译是"节俭数"

Dans ce problème, nous obtenons un entier positif N. Notre tâche est de créer un programme qui vérifie si un nombre donné est un nombre économe.

NOMBRE FRUGAL - Un nombre dont les chiffres sont strictement supérieurs au nombre de chiffres dans la factorisation première du nombre donné.

Exemple - 625, le facteur premier du nombre 625 est 54.

Le nombre de chiffres dans 625 est 3.

54 vaut 2.

3 est strictement supérieur à 2. Par conséquent, 625 est un nombre économe.

Les premiers nombres frugaux sont - 125, 128, 243, 256, 343, 512, 625 etc.

Prenons un exemple pour comprendre le problème

Input: n = 128
Output: Frugal number
Explanation :
Factors of 128 are 2^7, number of digits 2.
The number of digits in 128 is 3.
The number is a frugal number.
Copier après la connexion

Solution

Un des problèmes La solution est de vérifier si le nombre n actuel est un nombre parcimonieux. Pour ce faire, nous trouverons les facteurs premiers de n et calculerons le nombre de chiffres dans la factorisation, puis calculerons le nombre de chiffres dans ce nombre. Si le nombre de chiffres du nombre est supérieur au nombre de chiffres des facteurs, alors le nombre est un nombre parcimonieux, sinon il ne l'est pas.

Exemple

Programme qui illustre le fonctionnement de notre solution< /p>

#include <bits/stdc++.h>
using namespace std;

vector<long int> calcPrimeNum(long int n){

   bool primeNos[n + 1];
   memset(primeNos, true, sizeof(primeNos));
   for (int i = 2; i * i <= n; i++) {
      if (primeNos[i] == true) {
         for (int j = i * 2; j <= n; j += i)
            primeNos[j] = false;
      }
   }
   vector<long int> allPrimeNumbers;
   for (int i = 2; i < n; i++)
      if (primeNos[i])
         allPrimeNumbers.push_back(i);
   return allPrimeNumbers;
}
int countNumDigits(long int n){

   long long int num = n;
   int digitCount = 0;
   while (num != 0) {
      num = num / 10;
      digitCount++;
   }
   return digitCount;
}
bool isFrugalNum(long int n){

   vector<long int> primeNum = calcPrimeNum(n);
   long int num = n;
   long int factorDigitCount = 0;
   for (int i = 0; i < primeNum.size(); i++) {
      if (num % primeNum[i] == 0) {
         long int k = 0;
         while (num % primeNum[i] == 0) {
            num = num / primeNum[i];
            k++;
         }
         if (k == 1)
            factorDigitCount = factorDigitCount + countNumDigits(primeNum[i]);
         else if (k != 1)
            factorDigitCount = factorDigitCount + countNumDigits(primeNum[i]) +                               countNumDigits(k);
      }
   }
   return (countNumDigits(n) > factorDigitCount && factorDigitCount != 0);
}
int main(){

   long int n = 625;
   cout<<"The number "<<n<<" is ";isFrugalNum(n)? cout<<"a Frugal number\n" : cout << "not a Frugal number\n";
   return 0;
}
Copier après la connexion

Sortie

The number 625 is a Frugal number
Copier après la connexion

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