ภาพรวมปัญหา
ได้รับจำนวนเต็ม ต้องกลับตัวเลข (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