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

C++로 주어진 범위 내 모든 회문(Palindrome) 찾아 출력하는 프로그램

이 튜토리얼에서는 C++을 사용하여 주어진 범위 안에 있는 모든 회문(Palindrome)을 찾아 출력하는 프로그램을 다룹니다.

회문이란?

회문(Palindrome)은 앞에서부터 읽으나 뒤에서부터 읽으나 같은 숫자나 문자열을 의미합니다. 예를 들어 121, 1331, 99 같은 숫자는 거꾸로 읽어도 동일하기 때문에 회문에 해당합니다.

문제 정의

프로그램은 최솟값(min)과 최댓값(max)으로 이루어진 수학적 범위를 입력으로 받습니다. 우리가 해야 할 작업은 해당 범위 내에 존재하는 모든 회문을 찾아 순서대로 화면에 출력하는 것입니다.

알고리즘 접근 방식

구현 방법은 매우 간단합니다.

1. 범위의 시작 값부터 끝 값까지 모든 숫자를 하나씩 순회합니다.
2. 각 숫자에 대해 자릿수를 뒤집은 값(reversed number)을 계산합니다.
3. 원래 숫자와 뒤집은 숫자가 같다면 그 숫자는 회문이므로 출력합니다.

예제 코드

#include<iostream>
using namespace std;

// 숫자가 회문인지 검사하는 함수
int is_palin(int n){
    int rev = 0;
    for (int i = n; i > 0; i /= 10)
        rev = rev*10 + i%10;
    return (n==rev);
}

// 범위 내 모든 회문을 찾아 출력하는 함수
void countPal(int min, int max){
    for (int i = min; i <= max; i++)
        if (is_palin(i))
            cout << i << " ";
}

int main(){
    countPal(99, 250);
    return 0;
}

실행 결과

99 101 111 121 131 141 151 161 171 181 191 202 212 222 232 242

코드 설명

is_palin 함수: 매개변수로 받은 숫자 n의 자릿수를 역순으로 조합하여 rev를 만듭니다. 반복문에서 i % 10으로 마지막 자릿수를 추출하고, rev * 10을 통해 자릿수를 한 칸씩 밀어줍니다. 반복이 끝난 후 원래 값과 뒤집은 값이 같으면 1(true), 아니면 0(false)을 반환합니다.

countPal 함수: min부터 max까지 반복하면서 각 숫자를 is_palin 함수로 검사하고, 회문인 경우에만 공백과 함께 출력합니다.

위 실행 결과에서 볼 수 있듯이, 99부터 250 사이에는 총 16개의 회문이 존재하며 두 자리 회문(99)부터 세 자리 회문(242)까지 순차적으로 출력됩니다.