Sunday, July 9, 2017

1225 - Palindromic Numbers (II) Lightoj Problem Solution & Logic

http://www.lightoj.com/volume_showproblem.php?problem=1225
খুবই সহজ একটা প্রোবলেম , একটা সংখ্যা দেয়া থাকবে - তোমায় বলতে হবে , সেটা Palindromic কি না ?? Palindromic মানে , যে সংখ্যাকে উলটা করলেও , একই রকম দেখায় - এর মানে , তার মানের কোনো চেঞ্জ হয় না । যেমন , ১২২১ । এটাকে ,উলটা করে যদি লেখো , মানে শেষ থেকে যদি লেখো , তাহলেও ১২২১ ই হবে , কিন্তু - যদি সংখ্যাটি যদি - ১২৩৪ হতো , তাহলে উলটা করে লিখলে হতো ,৪৩২১ এর মানে - সংখ্যাটি চেঞ্জ হয়ে যেতো । এখন দেখবো,একটি - সংখ্যাকে কিভাবে উলটো করা যায়?নীচে  দেখো

ধরো , ১৮৯ কে রিভার্স করবো , তাহলে একটি variable n ধরে নেই যার মান , প্রথমে ০ ।

  ১৮৯ কে যদি ১০ দিয়ে ভাগ দিয়ে ভাগশেষ বের করতে যাই , তাহলে হবে  ৯ -এখন ১৮৯ কে ১০ দিয়ে ভাগ করে ফেলি , পাবো ১৮  এখন এই প্রক্রিয়াই আবার খাটাই। আর , ভাগশেষ  ৯  কে  আগের  n  এর মান কে ১০ দিয়ে গুণ দিয়ে তার সাথে যোগ দেই । একটা variable n
এর ভিতরে রাখি ,  n = n*১০ + ৯ == ০*১০+ ৯ ==  ৯।

এখন ১৮ কে যদি ১০ দিয়ে ভাগ দিয়ে ভাগশেষ বের করতে যাই , তাহলে হবে ৮ -এখন ১৮ কে ১০ দিয়ে
ভাগ করে ফেলি , পাবো  ১   এখন এই প্রক্রিয়াই আবার খাটাই। আর , ভাগশেষ  ৮  কে  আগের  n  এর মান কে ১০ দিয়ে গুণ দিয়ে তার সাথে যোগ দেই । একটা variable nএর ভিতরে রাখি ,  n = n*১০ + ৯ == ৯*১০+ ৮ ==  ৯৮ ।    

তাহলে , এভাবে যদি  ভাগফল  0  না হওয়া অবদি চালাই , তাহলে কিন্তু  ১৮৯ এর উলটো মান ৯৮১ পেয়ে যাবো , চলো কোড দেখি ---

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

//Nayeem Mollick Joy ,Applied Physics And Electronic Engineering, University Of Rajshahi.

bool palindrome(int x)
{
    int ans;
    int temp;

    temp = x;
    ans = 0;

    while(x) {
        ans = ans * 10 + x % 10;
        x = x / 10;
    }

    return ans == temp;
}


int main()
{

    int x;
    int t;
    scanf("%d", &t);

    for (int cs = 1; cs <= t; cs++) {
        scanf("%d", &x);
        palindrome(x) ? printf("Case %d: Yes\n", cs) : printf("Case %d: No\n", cs);
    }
    return 0;
}

No comments:

Post a Comment