회문(Palindrome)은 앞에서부터 읽으나 뒤에서부터 읽으나 그 순서가 동일한 단어, 숫자, 문장 또는 문자열을 뜻합니다. 예를 들어 121, 12321처럼 거꾸로 읽어도 같은 숫자는 모두 회문에 해당합니다.
이번 글에서는 C 언어를 활용해 콘솔로 입력받은 숫자가 회문인지 아닌지 판별하는 방법을 알아보겠습니다. 기본 원리는 간단합니다. 입력받은 숫자의 자릿수를 하나씩 분리해 역순으로 조립한 뒤, 원래 값과 비교하면 됩니다.
회문 판별 로직
먼저 콘솔에서 숫자를 입력받고, 이 값을 temp 변수에 복사해 둡니다. 그다음 숫자가 0보다 큰 동안 아래 로직을 반복 실행합니다.
while(n>0){
r=n%10;
sum=(sum*10)+r;
n=n/10;
}이 코드의 동작 과정을 단계별로 살펴보면 다음과 같습니다.
n % 10: 숫자의 마지막 자릿수(1의 자리)를 추출합니다.sum = (sum * 10) + r: 추출한 자릿수를 기존 값 뒤에 붙여 숫자를 역순으로 만듭니다.n = n / 10: 처리가 끝난 마지막 자릿수를 제거합니다.
반복문이 종료된 후 temp == sum이라면 입력한 숫자는 회문입니다. 두 값이 다르다면 회문이 아닙니다.
C 프로그램 예제
다음은 입력값이 회문인지 검증하는 C 프로그램입니다.
#include<stdio.h>
#include<conio.h>
void main(){
int n, r, sum=0, temp;
printf("Enter a number: ");
scanf("%d",&n);
temp=n;
while(n>0){
r=n%10;
sum=(sum*10)+r;
n=n/10;
}
if(temp==sum)
printf("It is a palindrome number!");
else
printf("It is not a palindrome number!");
getch();
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
12345
It is not a palindrome number
12345를 거꾸로 뒤집으면 54321이 되어 원래 값과 일치하지 않으므로, 이 숫자는 회문이 아니라고 판별됩니다. 반면 121이나 12321처럼 뒤집어도 같은 숫자를 입력하면 "회문입니다"라는 메시지가 출력됩니다.