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

C++로 숫자가 회문(팰린드롬)인지 확인하는 프로그램

회문 수(팰린드롬 수)란 자릿수를 거꾸로 뒤집어도 원래 값과 동일하게 유지되는 숫자를 말합니다. 즉, 값이 전혀 변하지 않는 수이며, 대칭 수(symmetric number)라고도 부릅니다.

예를 들어 12321, 1551, 11 같은 숫자들은 자릿수를 뒤집어도 그대로이므로 회문에 해당합니다.

회문 판별 프로그램 예제

다음은 입력받은 숫자가 회문인지 아닌지를 판별하는 C++ 프로그램입니다.

#include<iostream>
using namespace std;
void palindrome(int num) {
   int rev=0,val;
   val = num;
   while(num > 0) {
      rev = rev * 10 + num % 10;
      num = num / 10;
   }
   if(val==rev)
   cout<<val<<" is a palindrome"<<endl;
   else
   cout<<val<<" is not a palindrome"<<endl;
}
int main() {
   palindrome(12321);
   palindrome(1234);
   return 0;
}

실행 결과

12321 is a palindrome
1234 is not a palindrome

프로그램 동작 원리

위 프로그램에서 palindrome 함수는 숫자가 회문인지 여부를 판별하는 역할을 합니다. 이 함수는 매개변수 num 하나를 받으며, 본격적인 연산에 앞서 num의 복사본인 val을 먼저 만들어 둡니다.

1. 숫자 뒤집기

반복문 안에서 num의 자릿수를 하나씩 뒤집어 rev에 저장합니다. 관련 코드는 다음과 같습니다.

int rev=0,val;
val = num;
while(num > 0) {
   rev = rev * 10 + num % 10;
   num = num / 10;
}

동작 과정을 단계별로 살펴보면 다음과 같습니다.

  • num % 10: 현재 숫자의 마지막 자릿수를 추출합니다.
  • rev * 10 + 나머지: 기존에 뒤집은 결과를 한 자리 왼쪽으로 밀고 새 자릿수를 추가합니다.
  • num / 10: 처리가 끝난 마지막 자릿수를 제거합니다.

예를 들어 1234가 입력되면 반복이 진행될수록 rev는 4 → 43 → 432 → 4321로 변하며, 최종적으로 뒤집힌 숫자가 완성됩니다.

2. 원래 값과 비교

뒤집기가 끝나면 revnum이 아닌 val과 비교합니다. 그 이유는 반복문이 모두 실행된 시점에는 num의 값이 이미 0이 되어 있기 때문입니다. 따라서 처음에 저장해 둔 복사본 val을 기준으로 삼아야 합니다.

if(val==rev)
cout<<val<<" is a palindrome"<<endl;
else
cout<<val<<" is not a palindrome"<<endl;

revval이 같다면 해당 숫자는 회문이므로 "is a palindrome"이 출력되고, 다르다면 회문이 아니므로 "is not a palindrome"이 출력됩니다.