숫자 범위를 정의하기 위해 두 개의 숫자 START와 END가 제공됩니다. 목표는 0과 같은 숫자가 없고 주어진 숫자 N과 동일한 숫자의 합을 갖는 [START,END] 범위의 모든 숫자를 찾는 것입니다. 또한 숫자는 M으로 나눌 수 있습니다.
START에서 END까지 숫자를 탐색하여 이를 수행하고 각 숫자에 대해 while 루프를 사용하여 숫자의 합을 계산합니다(모든 숫자가 0이 아닌 경우에만). 이 합계가 N이고 숫자가 M으로 나누어지면 카운트를 증가시킵니다.
예를 들어 이해합시다.
입력
START=1 END=100 N=9 M=6
출력
Numbers with digit sum N and divisible by M: 4
설명
Numbers 18, 36, 54, 72 have digit sum=9 and divisible by 6. None has 0 as a digit.
입력
START=100 END=200 N=10 M=2
출력
Numbers with digit sum N and divisible by M: 4
설명
Numbers 118, 136, 154, 172 have digit sum=10 and divisible by 2. None has 0 as a digit.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
정수 START, END, N 및 M을 사용합니다.
-
함수 digitSum(int start, int end, int n, int m)은 숫자가 n이고 m으로 나눌 수 있고 모두 0이 아닌 숫자를 포함하는 숫자의 개수를 반환합니다.
-
이러한 숫자에 대해 초기 변수 개수를 0으로 간주합니다.
-
변수 digsum을 0으로 사용
-
변수 플래그를 0으로 취하십시오.
-
for 루프를 사용하여 숫자 범위를 탐색합니다. i=시작에서 i=끝
-
이제 각 숫자 num=i에 대해 num%m==0( m 으로 나눌 수 있음)이면 앞으로 이동합니다.
-
while 루프를 사용하여 숫자가>0인지 확인합니다. 그리고 숫자를 찾으세요.
-
숫자=num%10. 숫자가 0이 아니면 digsum+=digit를 계산합니다. 다음 숫자를 추가하려면 num=num/10을 줄입니다. 숫자가 0이면 플래그=0을 설정하고 while 루프를 끊습니다.
-
동안이 끝나면 ( digsum ==n 및 flag==1 ) 확인하십시오. true인 경우 카운트가 증가합니다.
-
이제 i를 m(m의 배수)만큼 증가시킵니다.
-
모든 루프의 끝에서 count는 조건을 만족하는 총 숫자를 갖게 됩니다.
-
카운트를 결과로 반환합니다.
예
#include <bits/stdc++.h>
using namespace std;
int digitSum(int start, int end, int n, int m){
int count = 0;
int digsum = 0;
int flag=0;
for (int i = start; i <= end; i++){
int num=i;
digsum=0;
flag=0;
if(num%m==0){
while(num>0){
int digit=num%10;
if(digit==0){
flag=0;
break;
}
digsum+=num%10; //sum of digits
num=num/10;
flag=1;
}
if(digsum==n && flag==1) //original number is i {
count++;
cout<<i<<" ";
}
i+=m; //now increment in multiples of m
i--; // for loop has i++
}
}
return count;
}
int main(){
int START = 1;
int END = 100;
int N = 9;
int M = 6;
cout <<"Numbers with digit sum N and divisible by M: "<<digitSum(START,END,N, M);
return 0;
} 출력
위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -
Numbers with digit sum N and divisible by M: 4