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

সংখ্যা থেকে ডিজিট মুছে ১০^K দিয়ে বিভাজ্য করার ন্যূনতম রিমুভাল C++-তে


সমস্যা বিবরণ

দুটি ধনাত্মক ইন্টিজার N এবং K দেওয়া আছে। N থেকে ন্যূনতম কত ডিজিট মুছে ফেললে оставিত সংখ্যাটি ১০^K দিয়ে বিভাজ্য হবে তা বের করুন। অসম্ভব হলে -1 প্রিন্ট করুন।

উদাহরণ

N = 10203027 এবং K = 2 হলে ৩ ডিজিট মুছে ফেলতে হবে। ৩, ২ এবং ৭ মুছে ফেললে সংখ্যাটি হয় 10200 যা ১০^2 দিয়ে বিভাজ্য।

অ্যালগরিদম

1. সংখ্যাটি শেষ থেকে ট্র্যাভার্স করুন। যদি বর্তমান ডিজিট শূন্য না হয়, তবে কাউন্টার বাড়ান, অন্যথায় K কমান।
2. যদি K শূন্য হয়, তবে কাউন্টার রিটার্ন করুন।
3. পুরো সংখ্যা ট্র্যাভার্স করার পর চেক করুন K শূন্য কিনা। শূন্য হলে কাউন্টার রিটার্ন করুন, অন্যথায় N-এর ডিজিট সংখ্যা - ১ রিটার্ন করুন।
4. যদি সংখ্যাতে কোনো শূন্য না থাকে, তবে -1 রিটার্ন করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
int getBitsToBeRemoved(int n, int k) {
    string s = to_string(n);
    int result = 0;
    int zeroFound = 0;
    for (int i = s.size() - 1; i >= 0; --i) {
        if (k == 0) {
            return result;
        }
        if (s[i] == '0') {
            zeroFound = 1;
            --k;
        } else {
            ++result;
        }
    }
    if (!k) {
        return result;
    } else if (zeroFound) {
        return s.size() - 1;
    }
    return -1;
}
int main() {
    int n = 10203027;
    int k = 2;
    cout << "Minimum required removals = " << getBitsToBeRemoved(n, k) << endl;
    return 0;
}

উপরের প্রোগ্রাম কম্পাইল ও এক্সিকিউট করলে নিচের আউটপুট জেনারেট হবে

আউটপুট

Minimum required removals = 3

  1. C++ প্রোগ্রাম: সংখ্যা অন্য একটি সংখ্যার পাওয়ার কিনা চেক করা

  2. C++ প্রোগ্রাম: সংখ্যা xʸ আকারে এক্সপ্রেস করা যায় কিনা চেক

  3. C++ প্রোগ্রাম: বড় সংখ্যা ২০ দিয়ে বিভাজ্য কিনা চেক (স্ট্রিং ইনপুট)

  4. সংখ্যার ঘাত (Power) বের করার C++ প্রোগ্রাম (রিকার্সিভ ও নন-রিকার্সিভ)