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

C++에서 자릿수의 합이 10인 n번째 숫자

<시간/>

숫자 합이 10인 숫자는

19, 28, 37, 46, 55, 64, 73, 82, 91 등,

시리즈를 관찰하면 각 숫자는 9씩 증가합니다. 위의 시퀀스에는 9만큼 증가하는 동안 자릿수 합이 10이 아닌 숫자가 있습니다. 그러나 자릿수 합이 10인 모든 숫자를 얻게 됩니다.

따라서 9씩 증가하고 숫자 합계를 확인하고 n번째 숫자를 찾는 루프를 가질 수 있습니다. 몇 가지 예를 살펴보겠습니다.

입력

3
7

출력

37
73

알고리즘

  • 숫자 n 초기화
  • 카운터를 0으로 초기화합니다.
  • 19에서 반복되는 루프 작성
    • 현재 숫자의 합이 10이면 카운터를 1씩 증가시킵니다.
    • 카운터가 n이면 현재 숫자를 반환합니다.
    • 반복 변수를 9만큼 증가시킵니다.

구현

다음은 위의 알고리즘을 C++로 구현한 것입니다.

#include <bits/stdc++.h>
using namespace std;
int findNthNumber(int n) {
   int count = 0, i = 19;
   while (true) {
      int sum = 0;
      for (int number = i; number > 0; number = number / 10) {
         sum = sum + number % 10;
      }
      if (sum == 10) {
         count++;
      }
      if (count == n) {
         return i;
      }
      i += 9;
   }
   return -1;
}
int main() {
   int n = 7;
   cout << findNthNumber(7) << endl;
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

73