在C++中查詢n的所有除數中數字和的最大值


在這個問題中,我們給定一個整數n。我們的任務是*找到n的所有除數中數字和的最大值*。

問題描述:在這裡,我們將找到數字n的除數中,其數字和最大的一個。

讓我們來看一個例子來理解這個問題,

輸入:18

輸出:9

解釋:

18的所有除數是1, 2, 3, 6, 9, 18。

最大數字和是9。

解決方案

找到數字N的所有除數。然後找到每個除數的數字和,然後返回具有最大數字和的值。

程式說明了我們解決方案的工作原理,

示例

線上演示

#include <iostream>
using namespace std;

int calcDigitSum(int n) {
   
   int sum = 0;
   while (n != 0) {
      sum = sum + n % 10;
      n = n/10;
   }
   return sum;
}

int largestDigitSumdivisior(int n) {
   
   int maxSum = 0;
   for (int i = 1; i <= n; i++)
      if (n % i == 0)
      maxSum = max(maxSum, calcDigitSum(i));

   return maxSum;
}

int main() {
   
   int n = 45;
   cout<<"The divisor with largest sum of digits is "<<largestDigitSumdivisior(n)<<endl;
   return 0;
}

輸出

The divisor with largest sum of digits is 9

透過修改查詢除數的方法並使其更有效,可以使解決方案更有效。

在這個問題中,我們將迭代到sqrt(n),並找到所有除數,其他除數使用n/div計算。這將查詢除數的時間複雜度降低到sqrt(n)。

程式說明了我們解決方案的工作原理,

示例

線上演示

#include <iostream>
using namespace std;

int calcDigitSum(int n) {
   
   int sum = 0;
   while (n != 0) {
      sum = sum + n % 10;
      n = n / 10;
   }
   return sum;
}

int largestDigitSumdivisior(int n) {
   
   int maxSum = 0;
   for (int i = 1; i*i <= n; i++) {

      if (n % i == 0) {
         maxSum = max(maxSum, calcDigitSum(i));
         maxSum = max(maxSum,calcDigitSum(n/i));
      }  
   }
   return maxSum;
}

int main() {
   
   int n = 32;
   cout<<"The divisor with largest sum of digits is "<<largestDigitSumdivisior(n)<<endl;
   return 0;
}

輸出

The divisor with largest sum of digits is 8

更新於:2021年1月25日

136 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告