자릿수와 합계로 양수를 지정합니다. 목표는 입력 합과 같은 자릿수 합을 갖는 모든 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