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

পাইথনে বেস ১০ ইন্টিজারর কমপ্লিমেন্ট (Complement of Base 10 Integer in Python)


সমস্যা বিবরণ

একটি ডেসিমেল নম্বর দেওয়া আছে। এর বাইনারি রিপ্রেজেন্টেশনের কমপ্লিমেন্ট (বিট ফ্লিপ) নিয়ে আবার ডেসিমেলে কনভার্ট করে ফেরত দিতে হবে।

উদাহরণ: 20 → বাইনারি: 10100 → কমপ্লিমেন্ট: 01011 → ডেসিমেল: ১১।

সমাধানের পদ্ধতি

  1. নম্বরটিকে বাইনারি স্ট্রিং-এ কনভার্ট করুন (bin())।
  2. '0b' প্রিফিক্স বাদ দিয়ে বিটগুলো উল্টা দিয়ে পড়ুন।
  3. '0' হলে পরবর্তি বিট পজিশনের ভ্যালু (2^position) যোগ করুন।
  4. 'b' পাওয়া পর্যন্ত চলুন।

পাইথন উদাহরণ

class Solution(object):
    def bitwiseComplement(self, N):
        if N == 0:
            return 1
        s = bin(N)[2:]  # '0b' বাদ
        ans = 0
        power = 1
        for ch in reversed(s):
            if ch == '0':
                ans += power
            power <<= 1
        return ans

ob1 = Solution()
print(ob1.bitwiseComplement(20))

ইনপুট

20

আউটপুট

11

বিট ম্যানিপুলেশন পদ্ধতি (O(1) স্পেস, দ্রুত)

def bitwiseComplement(N):
    if N == 0:
        return 1
    # সবচোয়ে নিকটের ২-এর ঘাত বের করুন (MSB পজিশন)
    mask = 1
    while mask <= N:
        mask <<= 1
    # mask - 1 দিয়ে XOR করলে বিট ফ্লিপ হয়
    return (mask - 1) ^ N

# বা আরও সহজ:
def bitwiseComplement(N):
    if N == 0: return 1
    bits = N.bit_length()
    return (1 << bits) - 1 - N
  1. পাইথনে বাইনারি ট্রিতে পাথ সাম (Path Sum)

  2. পাইথনে লগারিদমিক ফাংশন (Log Functions) – math মডিউল

  3. পাইথনে bin() ফাংশন

  4. পাইথনে ইন্টারপ্রিটার বেস ক্লাস (Interpreter Base Classes) কী?