首頁  >  文章  >  後端開發  >  在C++中,"Frugal Number"的翻譯是"節儉數"

在C++中,"Frugal Number"的翻譯是"節儉數"

王林
王林轉載
2023-09-12 10:53:021048瀏覽

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

輸出

The number 625 is a Frugal number

以上是在C++中,"Frugal Number"的翻譯是"節儉數"的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除