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