Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 숫자 d를 추가한 후 가능한 최소 자릿수 합계 찾기

<시간/>

이 문제에서는 두 개의 숫자 n과 d가 주어집니다. 우리의 임무는 숫자 d를 더한 후 가능한 최소 자릿수 합을 찾는 것입니다.

문제 설명 − n에 d의 k번째 배수를 추가하여 자릿수 합을 최소화해야 합니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력

n = 5230, d = 54

출력

1

설명

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

솔루션 접근 방식

문제를 해결하는 간단한 방법은 1에서 8까지의 모든 d의 배수를 확인하는 것입니다. 9의 배수에서는 자릿수의 합이 반복되기 때문입니다. 이것은 모듈로 9를 기반으로 하며 숫자 합계를 반환합니다. 따라서 a+d*(9k+l) modulo 9는 a+d*l modulo 9와 같습니다. 따라서 1에서 8까지 l*d의 모든 배수를 확인하고 찾은 최소값을 반환합니다.

숫자 합이 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<<"The minimum possible digitsum after adding the number is "<<findMinDigitSum(n, d);
   return 0;
}

출력

The minimum possible digitsum after adding the number is 1