আমাদের একটি পূর্ণসংখ্যা দেওয়া আছে এবং এজেন্ডা হল সংখ্যার অঙ্কগুলো রিভার্স করে রিভার্সড সংখ্যাটি মূল সংখ্যার সাথে যোগ করা এবং ফলাফল সংখ্যাটি প্যালিনড্রোম কিনা চেক করা। যদি না হয়, তবে প্রক্রিয়াটি প্যালিনড্রোম পাওয়া পর্যন্ত পুনরাবৃত্তি করা হয়। প্রক্রিয়ার ব্রেকিং পয়েন্ট হল ১০০০ ইটারেশন এবং Long.MAX_VALUE থেকে বড় মান।
উদাহরণ
উদাহরণ ১
ইনপুট: 1678
আউটপুট: দেওয়া ইনপুট 1678-এর প্যালিনড্রোম 293392
ব্যাখ্যা: ইনপুট নম্বরটি প্রথমে রিভার্স করা হয় এবং তারপর মূল নম্বরটির সাথে যোগ করা হয়। তারপর প্যালিনড্রোম কিনা চেক করা হয়। যদি না হয়, তবে আপডেটেড নম্বরে একই প্রক্রিয়া পুনরাবৃত্তি করা হয়। ব্রেকিং পয়েন্ট: ১০০০ ইটারেশন এবং Long.MAX_VALUE-এর চেয়ে বড় মান।
উদাহরণ ২
ইনপুট: 202021038
আউটপুট: দেওয়া ইনপুট 202021038-এর প্যালিনড্রোম 1453553541
ব্যাখ্যা: একই প্রক্রিয়া অনুসরণ করা হয়।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- main ফাংশনের ভিতরে:
- ইনপুট নম্বর calculateReverseandAdd(input) মেথডে পাস করা হয়।
- calculateReverseandAdd মেথডের ভিতরে:
- rev_number ভেরিয়েবল ইন্ট্রোডিউস করা হয়।
- number <= max শর্তসহ লুপ ইটারেট করা হয়।
- লুপের ভিতরে:
- reverseNumber() মেথডে নম্বর পাস করে রিভার্স নম্বর বের করা হয়।
- রিভার্সড নম্বর ইনপুট নম্বরের সাথে যোগ করা হয়।
- প্রাপ্ত নম্বর checkPalindrome() মেথডে পাস করে প্যালিনড্রোম কিনা চেক করা হয়। হলে নম্বর প্রিন্ট করা হয়।
- যদি প্যালিনড্রোম না হয়, তবে প্রাপ্ত নম্বরে একই প্রক্রিয়া চলতে থাকে যতক্ষণ না প্যালিনড্রোম পাওয়া যায়। যদি ফলাফল Long.MAX_VALUE-এর চেয়ে বড় হয়, তবে ওই নম্বরের জন্য কোনো প্যালিনড্রোম সম্ভব নয়।
উদাহরণ কোড
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);
}
}
আউটপুট
Palindrome of the given input 1678 293392 Palindrome of the given input 2961 69696 Palindrome of the given input 202021038 1453553541