Cho một số nguyên. Nhiệm vụ: đảo ngược chữ số của số, cộng số đảo ngược vào số gốc, kiểm tra xem kết quả có phải palindrome (số đối xứng) không. Lặp lại cho đến khi ra palindrome. Điều kiện dừng: 1000 lần lặp hoặc giá trị vượt quá Long.MAX_VALUE.
Ví dụ
Đầu vào: 1678
Đầu ra: Palindrome của 1678 là 293392
Giải thích: Đảo số, cộng với gốc, kiểm tra palindrome. Nếu không phải thì lặp lại với số mới. Giới hạn 1000 lần lặp hoặc vượt Long.MAX_VALUE.
Đầu vào: 202021038
Đầu ra: Palindrome của 202021038 là 1453553541
Phương pháp tiếp cận
- Trong main(): Gọi calculateReverseandAdd(input)
- Trong calculateReverseandAdd:
- Biến rev_number
- Vòng lặp while (number <= max)
- Gọi reverseNumber() để đảo số
- Cộng rev_number vào number
- Gọi checkPalindrome() kiểm tra, nếu đúng in ra và break
- Nếu number > max: in "No possible palindromes for the input"
- reverseNumber(): Đảo chữ số bằng phép chia/mod 10
- checkPalindrome(): So sánh số với số đảo ngược
Ví dụ mã Java
import java.util.*;
public class ReverseAdd {
static final long max = Long.MAX_VALUE;
static long reverseNumber(long number) {
long rev_number = 0;
while (number > 0) {
rev_number = rev_number * 10 + number % 10;
number = number / 10;
}
return rev_number;
}
static boolean checkPalindrome(long number) {
return (reverseNumber(number) == number);
}
static void calculateReverseandAdd(long number) {
long rev_number = 0;
System.out.println("Palindrome of the given input " + number);
while (number <= max) {
rev_number = reverseNumber(number);
number = number + rev_number;
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);
}
}
Đầu ra
Palindrome of the given input 1678 293392 Palindrome of the given input 2961 69696 Palindrome of the given input 202021038 1453553541