/ 알고리즘

이진회귀수

알고리즘 이진회귀수
https://4am.kr/-ec-9d-b4-ec-a7-84-ed-9a-8c-ea-b7-80-ec-88-98/

프로그램 명: bpalin(open)

제한시간: 1 초
10 진수 n 의 이진수가 회귀수이면 이 수 n 을 이진 회귀수라 하자.

21 은 10 진수로 회귀수가 아니지만 , 2 진수로는 회귀수이다.(10101)

1 에서 100 000 사이에 있는 이진 회귀수를 모두 출력하는 것이 문제이다.

입력

입력은 없다.

출력

이진 회귀수를 크기 순으로 한 줄에 하나씩 출력한다.

입출력 예

입력 출력 1 3 ...

출처:

#include <iostream>
#define MAX 1000
using namespace std;
void binaryfind(int n)
{
    int binary[MAX], num = n, length = 0, answer = 1;
    // 주어진 수를 2진수로 변경
    while (n >= 1) {
        binary[length++] = n % 2;
        n /= 2;
    }
    // 2진수 전체 문자의 길의의 절반만큼 for문 돌림
    // 이때, 일치하지 않으면 바로 for문 종료
    for (int i = 0; i < length / 2; i++) {
        if (binary[i] != binary[length - 1 - i]) {
            answer = 0;
            break;
        }
    }
    // 실제 이진회귀수라면 출력
    if (answer == 1)
        printf("%d\n", num);
}

int main()
{
    //int a, b;
    //scanf("%d %d", &a, &b);
    //for (int i = a; i < b; i++)
    //binaryfind(i);
    for (int i = 1; i < 100000; i++)
        binaryfind(i);
    //1부터 100000까지
    return 0;
}