Monday, November 1, 2021

Divide Two Integers - Leetcode(Bangla)

 প্রব্লেম লিংক ঃ 

এই প্রব্লেমে ভাজ্য(Dividend) এবং ভাজক(Divisor) দেয়া থাকবে, ভাগফল(Quotient) বের করতে হবে। খুবই সহজ, রাইট ?
কিন্তু কোনো প্রকার গুন,ভাগ অথবা মোড করে বের করা যাবেনা ।

প্রথম কিছু ব্যাসিক জিনিস নিয়ে আলাপ করি।
দুইটা সংখ্যার ভাগফল কি ? এটা হইতেছে ভাজ্য থেকে "কতবার" ভাজক বিয়োগ করি সেটাই । আরো ক্লিয়ারলি বলি, ধরলাম ভাজ্য ১০ এবং ভাজক ২, তাহলে ভাজ্য থেকে যদি ভাজক কে ৫ বার বিয়োগ করলেই হইতেছে ।

অর্থ্যাত "নাম্বার অফ টাইমস" ভাজক'কে ভাজ্য থেকে বিয়োগ করলেই আমরা ভাগফল পাবো। এই এক লাইন ই যথেষ্ট এই প্রবলেম টা সলভ করার জন্য।

এই বিয়োগের ব্যাপারটা আমরা বিট ম্যানিপুলেশনের লেফট শিফট ব্যবহার করে করতে পারি ।

একটা উদাহরন নিই, ভাজ্য ১৬, ভাজক ৪ । যতক্ষন ভাজ্য জিরো(০) সমান অথবা বড় থাকবে ততক্ষন আমরা ভাজককে বিয়োগ করবো তাইতো ?
১৬ - ৪>=০
১২ - ৪>=০
৮ -  ৪>=০
৪ -  ৪ >=০

অর্থ্যাত ৫ ধাপে আমরা শুন্যতে চলে গেছি, আরো একটু ভালো করে বললে ভাজক, ভাজ্যের থেকে বড় হয়ে গেছে ।

আসলে আমরা ভাজক কে বিয়োগ করতেছি একসাথে তার ভ্যালু কিন্তু বাড়তেছে ।
আমরা এটা ইকুয়েশন দিয়েও লিখতে পারি ।

Dividend = NumberofTimes * Divisor + extra

16 = 4*4 + 0 ( 16 = Dividend, 4 = Divisor, 4 = Quotient)
13 = 3*4 + 1 ( 13 = Dividend, 4 = Divisor, 3 = 
Quotient)

তাহলে এখানে হইতছে একচুয়ালি এটা,
১৬ - ৪ = ১৬ - ৪*২ = ১৬ - ৪*৩ = ১৬ - ৪*৪ = ০
অর্থাৎ "Left shifting", 4<<=1

এটার জন্য আমাদেরকে পুরো অপারেশন টা নন নেগেটিভ নাম্বারের জন্য করতে হবে । সুতরাং ফলাফল শেষে চিহ্ন(-/+) হবে সেটা মেইনটেইন করতে হবে।

For better understanding see the code

No comments:

Post a Comment