在C ++中添加数字d后找到最小可能的数字总和

在这个问题上,我们给了两个数字n和d。我们的任务是在添加数字d之后找到最小可能的数字总和。

问题描述-我们需要通过将d的k倍加到n来最小化数字总和。

让我们举个例子来了解这个问题,

输入

n = 5230, d = 54
输出结果
1

解释

The number will be 5230 + (2*54) = 5338

解决方法

解决该问题的一种简单方法是检查d的所有1到8的所有倍数,因为在9的倍数处,数字的总和将重复。这基于模9,它将返回数字总和。因此,a + d *(9k + 1)模9等于a + d * l模9。因此,我们将检查l * d从1到8的所有倍数,并返回找到的最小值。

程序的进步可以利用以下事实来实现:数字总和永远不会小于1,因此如果我们使数字总和= 1,我们将返回它。

该程序说明了我们解决方案的工作原理,

示例

#include <iostream>
using namespace std;
int calcDigitSum(int n) {
   int i = n % 9;
   if (i == 0)
      return 9;
   else
      return i;
}
int findMinDigitSum(int n, int d) {
   int minSum = 10;
   int number;
   for (int i = 1; i < 9; i++) {
      number = (n + i * d);
      minSum = min(minSum, calcDigitSum(number));
      if(minSum == 1)
         return minSum;
   }
   return minSum;
}
int main() {
   int n = 5230, d = 54;
   cout<<"加号后的最小可能数字总和为 "<<findMinDigitSum(n, d);
   return 0;
}
输出结果
加号后的最小可能数字总和为 1