在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
廣告