Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 자릿수의 합이 N이 되는 숫자 X 찾는 방법

개요

이 튜토리얼에서는 어떤 숫자 X에 그 자릿수들의 합을 더했을 때 주어진 수 N과 같아지는 경우를 찾는 방법을 알아보겠습니다.

예를 들어, 76은 76 + (7 + 6) = 89가 되므로, N이 89일 때 정답은 76입니다. 이처럼 숫자 자체와 각 자릿수의 합을 더한 값이 목표값 N이 되는 수를 찾는 것이 이 문제의 핵심입니다.

접근 방법

핵심 아이디어는 매우 간단합니다. 주어진 숫자 N을 기준으로 좌우 100개 범위 안의 숫자들만 확인하면 됩니다.

N ≤ 1,000,000,000이고 자릿수의 합은 최대 100을 넘지 않기 때문에, 정답이 되는 숫자 X는 반드시 N에서 100 이내의 거리에 존재합니다. 따라서 전체 범위를 탐색할 필요 없이 제한된 구간만 확인하면 효율적으로 문제를 해결할 수 있습니다.

해결 단계

  • 숫자 N을 초기화합니다.
  • 100번 반복하는 루프를 작성합니다.
    • n - i와 n + i 값을 구합니다.
    • 각 숫자의 자릿수 합을 계산하여 원래 숫자에 더합니다.
    • 그 결과가 N과 같다면 해당 숫자를 출력합니다.

예제 코드

실제 동작하는 C++ 코드를 살펴보겠습니다.

#include <bits/stdc++.h>
using namespace std;

int digitsSum(int n) {
   int sum = 0;
   while (n) {
      sum += n % 10;
      n /= 10;
   }
   return sum;
}

void findX(long int n) {
   bool is_found = false;
   for (int i = 0; i <= 100; i++) {
      long int valueOnLeft = abs(n - i) + digitsSum(abs(n - i));
      long int valueOnRight = n + i + digitsSum(n + i);
      if (valueOnLeft == n) {
         is_found = true;
         cout << abs(n - i) << " ";
      }
      if (valueOnRight == n) {
         is_found = true;
         cout << (n + i) << " ";
      }
   }
   if (!is_found) {
      cout << "No numbers found";
   }
   cout << endl;
}

int main() {
   int n = 89;
   findX(n);
   return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.

76

N이 89일 때, 76의 자릿수 합은 7 + 6 = 13이고, 76 + 13 = 89이므로 정답은 76입니다.

마무리

이번 튜토리얼에서는 자릿수의 합을 더했을 때 특정 값 N이 되는 숫자 X를 찾는 방법을 배웠습니다. 제한된 탐색 범위를 활용하면 불필요한 연산 없이 빠르게 답을 찾을 수 있다는 점이 핵심입니다. 궁금한 점이 있다면 댓글로 남겨주세요.