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

C++에서 범위의 단항 수 세기

<시간/>

범위를 나타내는 두 개의 숫자 시작과 끝이 주어집니다. 목표는 [ start, end ] 사이에 존재하는 단항 수의 개수를 찾는 것입니다.

다음 단계에 따라 숫자가 단항인지 확인할 수 있습니다. 숫자 13을 취하면 12 + 32 =10, 12 + 02 =1이러한 방식의 최종 합은 1이므로 13은 단항입니다.

예를 들어

입력

start=1 end=20

출력

Count of Unary Numbers in a Range are: 5

설명

The numbers are :
1, 7, 10, 12, and 13

입력

start=50 end=100

출력

Count of Unary Numbers in a Range are: 7

설명

The numbers are −
59, 63, 67, 74, 75, 78, and 89

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

1과 9 사이의 숫자 1과 7은 단항입니다. 다른 숫자의 경우 1이 될 때까지 자릿수 제곱의 합을 사용합니다. 범위의 모든 숫자에 대해 이 과정을 계속합니다. 이러한 방식으로 찾은 모든 단항 수에 대한 증분 수입니다.

  • 두 개의 정수를 입력으로 시작하고 끝냅니다.

  • 함수 check_unary(int number)는 전달된 값이 단항이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

  • Unary_range(int start, int end) 함수는 범위 변수를 받아 범위에 있는 단항 수의 개수를 반환합니다.

  • 초기 카운트를 0으로 간주합니다. for 루프를 사용하여 i=start에서 끝까지 트래버스합니다. check_unary(i)가 true를 반환하면 count를 증가시킵니다.

  • check_unary(int number) 내부에서 임시 변수 개수를 가져옵니다.

  • 숫자 N이 1, 7이면 true를 반환합니다. 10보다 작은 다른 모든 숫자에 대해 false를 반환합니다. ( number/10 ==0 ).

  • 그런 다음 while 루프에서 자릿수 제곱의 합을 계산합니다.

  • 합계가 1이 될 때까지 이러한 연속 합계에 대해 다시 check_unary(int number)를 호출합니다.

  • 결과로 카운트를 반환합니다.

예시

#include <iostream>
using namespace std;
bool check_unary(int number){
   int total;
   if (number == 1 ){
      return true;
   }
   else if(number == 7){
      return true;
   }
   else if (number / 10 == 0){
      return false;
   }
   while (number!= 0){
      int temp = number % 10;
      total = total + temp * temp;
      number = number / 10;
   }
   check_unary(total);
}
int Unary_range(int start, int end){
   int count = 0;
   for (int i = start; i <= end; i++){
      if (check_unary(i) == 1){
         count++;
      }
   }
   return count;
}
int main(){
   int start = 200, end = 400;
   cout<<"Count of Unary Numbers in a Range are: "<<Unary_range(start, end);
   return 0;
}

출력

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

Count of Unary Numbers in a Range are: 31