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

자릿수의 합이 C++에서 주어진 합과 같은 n자리 숫자의 개수

<시간/>

자릿수와 합계로 양수를 지정합니다. 목표는 입력 합과 같은 자릿수 합을 갖는 모든 d 자릿수를 찾는 것입니다. 앞에 0이 있는 숫자는 d자리 숫자로 간주되지 않습니다.

범위는 1에서 100 사이의 숫자와 1에서 500 사이의 합계입니다.

예를 들어 이해합시다.

예를 들어

입력 - 숫자 =3, Digi_sum =3

출력 - 숫자의 합이 주어진 합과 같은 n자리 숫자의 개수:6

설명 - 자릿수의 합이 3인 세 자리 숫자는 다음과 같습니다.

102, 111, 120, 201, 210, 300.

입력 - 숫자 =4 Digi_sum =2

출력 - 숫자의 합이 주어진 합과 같은 n자리 숫자의 개수:4

설명 - 자릿수의 합이 2인 4자리 숫자는 다음과 같습니다.

1001, 1010, 1100, 2000.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

이 접근 방식에서 우리는 첫 번째 d 자리 숫자에서 순회하고 숫자의 합이 주어진 합과 같은 첫 번째 숫자를 찾습니다. 그런 다음 주어진 합보다 더 많은 숫자의 합을 찾을 때까지 숫자를 9만큼 증가시킵니다. 입력 합보다 큰 자릿수 합을 갖는 숫자를 찾으면 숫자를 1씩 증가시키고 합을 입력 합으로 하여 다음 숫자를 찾습니다. 마지막 d자리 숫자까지 이 과정을 반복합니다.

  • 자릿수와 자릿수의 합을 입력으로 사용합니다.
  • 함수 숫자_합(int 숫자, int 숫자_합)은 두 입력 값을 모두 받아 숫자의 합이 주어진 합과 같은 n자리 숫자의 개수를 반환합니다.
  • 초기 카운트를 0으로 합니다.
  • 첫 번째 숫자를 왼쪽 =pow(10, 숫자 - 1)로 사용합니다. 그리고 범위의 마지막 숫자는 right =pow(10,digits) - 1입니다(예:10과 99는 2인 경우).
  • 왼쪽에서 오른쪽으로 while 루프 트래버스를 사용합니다.
  • 처음=0, 마지막=i를 취합니다.
  • 각 i( last )에 대해 가장 오른쪽 숫자( last % 10 )를 취해 처음에 추가합니다. 다음 반복을 위해 마지막을 10만큼 줄입니다.
  • 첫 번째가 digi_sum과 같으면 count를 증가시키고 다음 반복을 위해 i를 9만큼 업데이트합니다.
  • 그렇지 않으면 i를 1씩 증가시킵니다.
  • 모든 루프가 끝나면 숫자 합이 digi_sum과 같은 숫자로 계산됩니다.
  • 결과로 카운트를 반환합니다.

예시

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

int digits_sum(int digits, int digi_sum) {
   int count = 0;
   int Left = pow(10, digits - 1);
   int right = pow(10, digits) - 1;
   int i = Left;
   while (i <= right) {
      int first = 0;
      int last = i;
      while (last != 0) {
         first = first + last % 10;
         last = last / 10;
      }
      if (first == digi_sum) {
         count++;
         i = i + 9;
      } else {
         i++;
      }
   }
   return count;
}
int main() {
   int digits = 5;
   int digi_sum = 7;
   cout << "Count of n digit numbers whose sum of digits equals to given sum are: " << digits_sum(digits, digi_sum);
   return 0;
}

위의 코드를 실행하면 다음 출력이 생성됩니다 -

출력

Count of n digit numbers whose sum of digits equals to given sum are: 5