Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ฟังก์ชัน Reverse and Add ใน Java

ภาพรวมปัญหา

ได้รับจำนวนเต็ม ต้องกลับตัวเลข (reverse digits) บวกกับตัวเลขเดิม ตรวจสอบว่าผลลัพธ์เป็น palindrome หรือไม่ หากไม่ใช่ ทำซ้ำกับผลลัพธ์ใหม่ จนกว่าจะได้ palindrome หรือถึงเงื่อนไขหยุด (1000 รอบ หรือเกิน Long.MAX_VALUE)

ตัวอย่าง

Input: 1678

Output: Palindrome of the given input 1678 → 293392

Input: 202021038

Output: → 1453553541

แนวทางการแก้ปัญหา

  • reverseNumber(n): กลับตัวเลขโดย n % 10 และ n / 10
  • checkPalindrome(n): ตรวจสอบ reverseNumber(n) == n
  • calculateReverseandAdd(n): วนลูปจนกว่าจะได้ palindrome หรือเกินค่าสูงสุด

ตัวอย่างโค้ด Java

import java.util.*;

public class ReverseAdd {
    static final long max = Long.MAX_VALUE;

    static long reverseNumber(long number) {
        long rev = 0;
        while (number > 0) {
            rev = rev * 10 + number % 10;
            number /= 10;
        }
        return rev;
    }

    static boolean checkPalindrome(long number) {
        return reverseNumber(number) == number;
    }

    static void calculateReverseandAdd(long number) {
        System.out.println("Palindrome of the given input " + number);
        while (number <= max) {
            long rev = reverseNumber(number);
            number += rev;
            if (checkPalindrome(number)) {
                System.out.println(number);
                break;
            } else if (number > max) {
                System.out.println("No possible palindromes for the input");
            }
        }
    }

    public static void main(String[] args) {
        calculateReverseandAdd(1678);
        calculateReverseandAdd(2961);
        calculateReverseandAdd(202021038);
    }
}

ผลลัพธ์

Palindrome of the given input 1678 293392
Palindrome of the given input 2961 69696
Palindrome of the given input 202021038 1453553541