회문 번호 프로그램 Java while 및 for 루프 사용
⚡ 스마트 요약
회문 번호 프로그램 Java 이 알고리즘은 숫자의 자릿수를 뒤집어 앞뒤로 읽었을 때 값이 동일한지 여부를 판별합니다. 이 글에서는 해당 알고리즘, while 루프 버전, for 루프 버전, 문자열 기반 방식, 재귀, 예외 처리, 복잡도 분석 및 검증된 출력 결과를 제시합니다.

회문수란 무엇인가요?
A 회문 수 팰린드롬은 숫자를 뒤집어도 같은 숫자가 되는 수입니다. 예를 들어 131은 자릿수를 뒤집어도 같은 숫자입니다. 팰린드롬은 세로축을 기준으로 대칭입니다. 철자를 뒤집어도 같은 단어가 되는 경우도 마찬가지입니다.
회문 숫자의 예 Java
121, 393, 34043, 111, 555, 48084
회문 단어의 예
LOL, MADAM
0부터 9까지의 모든 숫자는 정의상 회문입니다. 왜냐하면 한 자릿수를 뒤집어도 같은 숫자가 되기 때문입니다.
회문 번호 알고리즘
아래는 회문수 알고리즘의 논리입니다. Java:
- 확인해야 할 입력 번호를 가져옵니다. 팔린 드롬.
- 해당 숫자를 임시 변수에 복사한 다음 역수로 바꿉니다.
- 반전된 숫자와 원래 숫자를 비교해보세요.
- 두 숫자의 앞뒷면이 같으면 그 숫자는 "회문수"입니다.
- 그렇지 않으면 그 숫자는 "회문 숫자"가 아닙니다.
반전 과정 자체만 주의하면 됩니다. 두 가지 산술 연산만으로 모든 작업이 완료되며, 아래 표를 참조하세요. trac171이라는 값으로 그들을 평가합니다.
| 패스 | (남은 숫자) | 지난Digit = a % 10 | 합계 = (합계 * 10) + 마지막Digit | a = a / 10 |
|---|---|---|---|---|
| 1 | 171 | 1 | 1 | 17 |
| 2 | 17 | 7 | 17 | 1 |
| 3 | 1 | 1 | 171 | 0 |
최종 계산 후 합계는 171이 되는데, 이는 원래 입력값과 같으므로 해당 숫자는 회문임이 확인됩니다.
입력번호가 Palindrome인지 아닌지 확인하는 방법
아래는 회문 프로그램입니다. Java WHILE 루프를 사용합니다. 루프는 숫자가 남아 있는 동안 계속되며, print 문을 통해 각 반복 동안 모든 변수의 상태를 출력합니다.
package com.guru99; public class PalindromeNum { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 171; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number while(a > 0) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; a = a / 10; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code 출력:
Input Number 171 Last Digit 1 Digit 1 was added to sum 0 Input Number 17 Last Digit 7 Digit 7 was added to sum 10 Input Number 1 Last Digit 1 Digit 1 was added to sum 170 Number is palindrome
for 루프를 사용하여 Palindrome을 확인하는 프로그램
아래는 Java for 루프를 사용하여 회문을 만드는 프로그램입니다. 헤더에는 종료 조건과 나눗셈 연산이 포함되어 있으므로 루프 본문에서는 다시 나눗셈을 해서는 안 됩니다.
package com.guru99; public class PalindromeNumForLoop { public static void main(String[] args) { int lastDigit, sum = 0, a; int inputNumber = 185; //It is the number to be checked for palindrome a = inputNumber; // Code to reverse a number for( ; a != 0; a /= 10 ) { System.out.println("Input Number " + a); lastDigit = a % 10; //getting remainder System.out.println("Last Digit " + lastDigit); System.out.println("Digit " + lastDigit + " was added to sum " + (sum * 10)); sum = (sum * 10) + lastDigit; } // if the given number equals sum then the number is a palindrome, otherwise not if(sum == inputNumber) System.out.println("Number is palindrome "); else System.out.println("Number is not palindrome"); } }
Code 출력:
Input Number 185 Last Digit 5 Digit 5 was added to sum 0 Input Number 18 Last Digit 8 Digit 8 was added to sum 50 Input Number 1 Last Digit 1 Digit 1 was added to sum 580 Number is not palindrome
⚠️ 경고: 흔히 저지르는 실수는 계속 유지하는 것입니다. a = a / 10; 헤더에 이미 내용이 포함되어 있는 동안 for 루프 본문 내부에 있습니다. a /= 10그러면 숫자가 매 단계마다 두 번씩 나누어지고, 절반의 자릿수가 건너뛰어지며, 121과 같은 진정한 회문이 회문이 아닌 것으로 잘못 보고됩니다.
Palindrome 프로그램 Java 문자열 사용 Reverse
값을 텍스트로 변환하면 StringBuilder를 사용하여 한 번의 호출로 값을 뒤집을 수 있습니다. 이 방법은 숫자 방식으로는 처리할 수 없는 단어에도 동일하게 적용됩니다.
package com.guru99; public class PalindromeString { public static boolean isPalindrome(String text) { // ignore case so MADAM and madam behave identically String clean = text.toLowerCase(); String reversed = new StringBuilder(clean).reverse().toString(); return clean.equals(reversed); } public static void main(String[] args) { System.out.println(isPalindrome("121")); System.out.println(isPalindrome("MADAM")); System.out.println(isPalindrome("Java")); } }
Code 출력:
true true false
Palindrome 프로그램 Java 재귀를 사용하기
재귀 호출은 가장 바깥쪽의 두 문자를 비교한 다음, 줄어드는 중간 부분에 대해 자기 자신을 호출합니다. 이 메서드는 남은 문자가 두 개 미만이 되면 종료됩니다.
package com.guru99; public class PalindromeRecursion { public static boolean isPalindrome(String text, int left, int right) { // base case: pointers met or crossed if (left >= right) { return true; } if (text.charAt(left) != text.charAt(right)) { return false; } return isPalindrome(text, left + 1, right - 1); } public static void main(String[] args) { String value = "34043"; System.out.println(value + " is palindrome: " + isPalindrome(value, 0, value.length() - 1)); String other = "12345"; System.out.println(other + " is palindrome: " + isPalindrome(other, 0, other.length() - 1)); } }
Code 출력:
34043 is palindrome: true 12345 is palindrome: false
예외적인 경우와 방법 비교
세 가지 입력값 때문에 단순한 구현은 실패하므로, 모든 버전은 사용 전에 해당 입력값에 대해 테스트해야 합니다.
- 음수: -121과 같은 값은 끝에 마이너스 부호에 대응하는 부호가 없기 때문에 절대 회문이 아닙니다.
if (inputNumber < 0) return false;. - 후행 0: 값 100은 1로 반전되므로 비교 결과는 올바르게 false를 반환합니다. 끝자리가 0인 값 중에서는 숫자 0만 통과합니다.
- 정수 오버플로: Rev1,999,999,999와 같은 큰 정수를 입력하면 정수 범위를 초과할 수 있습니다. 입력값이 제한에 근접할 수 있는 경우 합계를 long형으로 선언하십시오.
아래 표는 이 페이지에 제시된 네 가지 접근 방식을 비교합니다.
| 방법 | 시간 복잡성 | 공간 복잡성 | 단어용 작품 | 노트 |
|---|---|---|---|---|
| While 루프 | O (로그 n) | O (1) | 아니 | 숫자 반전의 가장 명확한 예시 |
| For 루프 | O (로그 n) | O (1) | 아니 | 동일한 논리, 헤더에만 구분 기호 사용 |
| StringBuilder 역순 | O (N) | O (N) | 가능 | 가장 짧은 코드이며, 새로운 문자열을 할당합니다. |
| 재귀 | O (N) | O(n) 스택 | 가능 | 재귀에 대한 면접 질문에 유용합니다. |
숫자 extrac여기서 사용된 패턴은 여러 연습 문제에서 다시 나타납니다. 계속 진행하세요. 피보나치 수열 Java 밸리 Java 소수를 판별하는 프로그램및 Bubble 정렬 알고리즘 Java반복문 구문 자체에 대해서는 다음을 참조하십시오. 각 루프에서 Java 그리고 더 넓은 Java 지도 시간, 그리고 봐라 Java 문자열 텍스트 기반 방식의 경우.
