卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章19655本站已运行344

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

在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 numbern" : cout << "not a Frugal numbern";
   return 0;
}

输出

'
The number 625 is a Frugal number
卓越飞翔博客
上一篇: 如何使用 PHP 开发社交媒体和社区网站的功能
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏