범위를 나타내는 두 개의 숫자 시작과 끝이 주어집니다. 목표는 [ 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