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

C++로 특정 범위에서 0이 아닌 모든 자릿수로 나누어 떨어지는 숫자 개수 구하기

이 문제에서는 두 개의 숫자 STARTEND가 주어져 하나의 숫자 범위를 정의합니다. 목표는 [START, END] 범위 안에 있는 숫자 중, 자기 자신의 0이 아닌 모든 자릿수로 나누어 떨어지는 숫자의 개수를 구하는 것입니다.

해결 방법은 START부터 END까지 숫자를 하나씩 순회하면서, 각 숫자에 대해 while 반복문을 사용해 해당 숫자가 0이 아닌 모든 자릿수로 나누어 떨어지는지 검사하는 것입니다. 조건을 만족하면 카운트를 증가시킵니다.

예제로 이해하기

입력

START=10 END=20

출력

0이 아닌 모든 자릿수로 나누어 떨어지는 숫자의 개수: 14

설명

10, 11, 12, 15, 20은 자신의 0이 아닌 모든 자릿수로 나누어 떨어집니다.

입력

START=100 END=200

출력

0이 아닌 모든 자릿수로 나누어 떨어지는 숫자의 개수: 25

설명

조건을 만족하는 숫자 목록: 100 101 102 104 105 110 111 112 115 120 122 124 126 128 132 135 140 144 150 155 162 168 175 184 200

프로그램에 적용한 접근 방식

  • 범위를 나타내는 정수 변수 START와 END를 입력받습니다.

  • 함수 divisiblebyDigits(int start, int end)는 범위 변수를 받아, 0이 아닌 모든 자릿수로 나누어 떨어지는 숫자의 개수를 반환합니다.

  • 조건을 만족하는 숫자를 세기 위해 초기 count 변수를 0으로 설정합니다.

  • 플래그 역할을 할 flag 변수를 0으로 초기화합니다.

  • for 반복문으로 i=start부터 i=end까지 범위의 숫자를 순회합니다.

  • 각 숫자 num=i에 대해 while 반복문으로 num이 0보다 큰 동안 검사를 진행합니다.

  • digit = num % 10으로 마지막 자릿수를 추출합니다. digit이 0보다 크고 i % digit == 0이면 flag=1로 설정하고, 그렇지 않으면 flag=0으로 만들고 반복문을 종료(break)합니다. 이후 num = num / 10으로 다음 자릿수를 검사합니다.

  • i의 모든 0이 아닌 자릿수가 i를 완전히 나누어 떨어지게 하면 flag는 1이 되고, count를 증가시킵니다.

  • 모든 반복문이 끝나면 count에는 조건을 만족하는 숫자의 총 개수가 저장됩니다.

  • count를 결과값으로 반환합니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;
int divisiblebyDigits(int start, int end){
    int count = 0;
    int flag=0;
    for (int i = start; i <= end; i++){
        int num=i;
        while(num>0){
            int digit=num%10;
            if(digit>0){
                if(i%digit==0)
                    { flag=1; } // 플래그 설정
                else{
                    flag=0; // 플래그 해제
                    break;
                }
            }
            num=num/10;
        }
        if(flag==1){ // 0이 아닌 모든 자릿수로 나누어 떨어지는 경우
            count++;
            //cout<<i<<" ";
        }
    }
    return count;
}
int main(){
    int START = 10, END = 50;
    cout <<"0이 아닌 모든 자릿수로 나누어 떨어지는 숫자의 개수: "<< divisiblebyDigits(START,END);
    return 0;
}

출력 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

0이 아닌 모든 자릿수로 나누어 떨어지는 숫자의 개수: 14