在 C++ 中找出 n 所有除数中数字的最大和

c++server side programmingprogramming

在这个问题中,我们给定一个整数 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<<"数字和最大的除数是"<<largestDigitSumdivisior(n)<<endl;
   return 0;
}

输出

数字和最大的除数是 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<<"数字和最大的除数是"<<largestDigitSumdivisior(n)<<endl;
   return 0;
}

输出

数字和最大的除数是 8

相关文章