>  기사  >  백엔드 개발  >  C++에서는 "Frugal Number"를 "srugal Number"로 번역합니다.

C++에서는 "Frugal Number"를 "srugal Number"로 번역합니다.

王林
王林앞으로
2023-09-12 10:53:021045검색

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

이 문제에서는 양의 정수 N을 얻습니다. 우리의 임무는 주어진 숫자가 알뜰한 숫자인지 확인하는 프로그램을 만드는 것입니다.

FRUGAL NUMBER - 주어진 숫자의 소인수분해에 포함된 자릿수보다 엄격하게 큰 자릿수를 갖는 숫자입니다.

- 625, 숫자 625의 소인수는 54입니다.

625의 자릿수는 3입니다.

54은 2입니다.

3은 엄밀히 말하면 2보다 큽니다. 그러므로 625는 알뜰한 숫자이다.

처음 몇 개의 알뜰한 숫자는 - 125, 128, 243, 256, 343, 512, 625 등입니다.

문제를 이해하기 위해 예를 들어보겠습니다

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.

해결책

문제 중 하나 해결 방법 현재 숫자 n이 인색한 숫자인지 확인하는 것입니다. 이를 위해 n의 소인수를 찾고 인수분해의 자릿수를 계산한 다음 해당 숫자의 자릿수를 계산합니다. 숫자의 자릿수가 인수의 자릿수보다 크면 숫자는 간결한 숫자이고, 그렇지 않으면 그렇지 않습니다.

예제

우리 솔루션의 작동 방식을 보여주는 프로그램

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

Output

The number 625 is a Frugal number

위 내용은 C++에서는 "Frugal Number"를 "srugal Number"로 번역합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제