회문 번호 프로그램 Java while 및 for 루프 사용

⚡ 스마트 요약

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

  • 🔁 핵심 정의: 회문수는 자릿수를 뒤집어도 원래 숫자가 변하지 않는 수입니다. 예를 들어 131, 393, 34043이 있습니다.
  • Rev베르살 기법: 절댓값 연산자 extrac마지막 자릿수이며, 정수 나눗셈을 통해 한 번에 한 자릿수씩 제거됩니다.
  • 🧮 누적기 규칙: 각 단계에서는 누적 합계에 10을 곱한 다음 새로 계산된 값을 더합니다.trac테드 디지털.
  • 🔂 루프 선택: while 루프와 for 루프는 나눗셈이 반복마다 정확히 한 번만 나타나는 경우 동일한 결과를 생성합니다.
  • 🔤 문자열 메서드: StringBuilder는 텍스트를 직접 역으로 비교하며 단어뿐 아니라 숫자에도 작동합니다.
  • ⚠️ 엣지 케이스: 한 자릿수 값은 항상 회문이고, 음수 값은 절대 회문이 아니며, 끝에 0이 붙으면 숫자 비교가 불가능해집니다.
  • ⏱️ 복잡성 프로필: 두 루프 버전 모두 자릿수에 비례하는 O(log n) 시간 내에 실행되고 O(1)의 추가 공간을 사용합니다.

회문 번호 프로그램 Java

회문수란 무엇인가요?

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

예외적인 경우와 방법 비교

세 가지 입력값 때문에 단순한 구현은 실패하므로, 모든 버전은 사용 전에 해당 입력값에 대해 테스트해야 합니다.

  1. 음수: -121과 같은 값은 끝에 마이너스 부호에 대응하는 부호가 없기 때문에 절대 회문이 아닙니다. if (inputNumber < 0) return false;.
  2. 후행 0: 값 100은 1로 반전되므로 비교 결과는 올바르게 false를 반환합니다. 끝자리가 0인 값 중에서는 숫자 0만 통과합니다.
  3. 정수 오버플로: 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 문자열 텍스트 기반 방식의 경우.

자주 묻는 질문

아니요. 마이너스 부호는 앞에만 나타나므로 -121을 뒤집으면 121-이 되어 절대 일치하지 않습니다. 0보다 작은 값에 대해서는 false를 반환하는 조기 안전 장치를 추가하세요.

곱셈은 ​​이미 계산된 자릿수를 왼쪽으로 한 자리 이동시켜 일의 자리가 새로 계산된 자릿수를 위해 비워지도록 합니다.tracted digit. 이것은 숫자를 역순으로 재구성합니다.

반전된 값이 정수 최대값인 2147483647을 초과하여 음수로 되돌아갈 수 있습니다. 누산기를 long형으로 선언하거나 값을 문자열로 비교하십시오.

Scanner와 nextInt를 사용하여 값을 읽은 다음, 동일한 반전 로직에 전달합니다. 숫자 이외의 입력이 프로그램 충돌을 일으키지 않도록 읽기 작업을 try 블록으로 감싸십시오.

일반적으로 코드 검토를 명시적으로 요청받으면 검토합니다. 하지만 요청 없이 오류를 지적하는 경우는 드물기 때문에, 예시 코드를 맹목적으로 신뢰하기보다는 121과 같은 알려진 회문을 사용하여 항상 오류를 테스트하는 것이 좋습니다.

이 문제는 몇 줄 안 되는 코드로 반복문 제어, 정수 연산, 그리고 예외 상황 추론 능력을 평가합니다. 또한 응시자가 AI가 생성한 코드를 제출하기 전에 검증하는지 여부도 파악할 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.