কম্পিউটার টিউটোরিয়াল

গুণ, ভাগ এবং মড অপারেটর ছাড়া দুটি পূর্ণসংখ্যা ভাগ করা C++-এ

সমস্যা বিবরণ

দুটি পূর্ণসংখ্যা dividend এবং divisor দেওয়া আছে। গুণ, ভাগ এবং মড অপারেটর ব্যবহার না করে dividend কে divisor দিয়ে ভাগ করতে হবে। ফলাফল শূন্যের দিকে কাটা হয় (truncate toward zero)।

উদাহরণ: dividend = 7, divisor = -3 হলে আউটপুট হবে -2।

সমাধানের ধাপসমূহ

  • দুটি আর্গুমেন্ট x এবং y নিন (x/y)।
  • যদি x < -Infinity এবং y = 1 হয়, তবে infinity রিটার্ন করুন।
  • a := |x|, b := |y| এবং ans := 0 সেট করুন।
  • যখন a - b >= 0:
    • p := 0
    • যখন a - (b << (1 << p)) >= 0: p := p + 1
    • a := a - (b << p)
    • ans := ans + (1 << p)
  • যদি x > 0 এবং y > 0 উভয় সত্য হয়, তবে ans রিটার্ন করুন, অন্যথায় -ans রিটার্ন করুন।

C++ কোড উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 

typedef long long int lli; 

class Solution { 
public: 
    int divide(int l, int y) { 
        if (l <= INT_MIN && y == -1) return INT_MAX; 
        lli a = labs(l); 
        lli b = labs(y); 
        lli ans = 0; 
        while (a - b >= 0) { 
            int x = 0; 
            while (a - (b << 1 << x) >= 0) { 
                x++; 
            } 
            a -= b << x; 
            ans += 1 << x; 
        } 
        return (l > 0) == (y > 0) ? ans : -ans; 
    } 
}; 

int main() { 
    Solution ob; 
    cout << ob.divide(40, 3); 
}

ইনপুট

40 3

আউটপুট

13
  1. C++-এ দুটি লিঙ্কড লিস্টের ইন্টারসেকশন পয়েন্ট খুঁজে বের করা

  2. C++-এ BST-এ Two Sum IV (Two Sum IV - Input is a BST)

  3. C++-এ দুটি বাইনারি ট্রি মার্জ করা

  4. পাইথনে দুটি ইন্টিজারের যোগফল (অপারেটর ছাড়া)