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