একটি বড় সংখ্যা (string হিসেবে) 'num' এবং অন্য একটি বড় সংখ্যা 'm' দেওয়া থাকলে, ভাগ করলে ভাগফল কত এবং মডুলাস দিয়ে অবশিষ্টাংশ কত, তা প্রিন্ট করা এই প্রোগ্রামের উদ্দেশ্য।
আউটপুট ফরম্যাট: Remainder = xxx; Quotient = yyy
মনে করুন, num = "14598499948265358486" এবং m = 487 হলে, অবশিষ্টাংশ ৪৩০ এবং ভাগফল ২৯৯৭৬৩৮৫৯৩০৭২৯৬৮৮ হবে।
উদাহরণ
Input: num = "214755974562154868" m = 17 Output: Remainder = 15 quotient = 12632704386009109 Input: num ="214" m = 5 Output: Remainder = 4 Quotient = 42
সমস্যা সমাধানের পদ্ধতি:
- প্রাথমিকভাবে mod = 0 সেট করা
- ডান দিক থেকে শুরু করে mod নির্ণয়: mod = (mod * 10 + digit) % m
- ভাগফল নির্ণয়: quo[i] = mod/m, যেখানে i হলো ভাগফলের পজিশন নম্বর
অ্যালগরিদম
Start Step 1 → long long ll ঘোষণা Step 2 → void quotientremainder(string num, ll m) ফাংশনে vectorvec ঘোষণা ll mod = 0 সেট Loop For i = 0 to num.size()-1 digit = num[i] - '0' সেট mod = mod * 10 + digit সেট quo = mod / m সেট vec.push_back(quo) কল mod = mod % m সেট End loop mod-এ থাকা অবশিষ্টাংশ প্রিন্ট zeroflag = 0 সেট Loop For i = 0 to vec.size()-1 If vec[i] == 0 && zeroflag == 0 then, Continue End If zeroflag = 1 সেট vec[i] প্রিন্ট End For Return Step 3 → main() ফাংশনে num = "14598499948265358486" ঘোষণা ও অ্যাসাইন ll m = 487 ঘোষণা ও অ্যাসাইন quotientremainder(num, m) কল Stop
উদাহরণ
#include <bits/stdc++.h> using namespace std; typedef long long ll; // বড় সংখ্যার মডুলাস গণনার ফাংশন void quotientremainder(string num, ll m) { // বড় সংখ্যার মডুলাস সংরক্ষণ vector<int> vec; ll mod = 0; // ধাপে ধাপে ভাগ করা for (int i = 0; i < num.size(); i++) { int digit = num[i] - '0'; // বর্তমান অঙ্ক যোগ করে মডুলাস আপডেট mod = mod * 10 + digit; // ভাগফল আপডেট int quo = mod / m; vec.push_back(quo); // পরবর্তী ইটারেশনের জন্য মডুলাস আপডেট mod = mod % m; } cout << "\nRemainder : " << mod << "\n"; cout << "Quotient : "; // শুরুর শূন্য মুছে ফেলার জন্য ফ্ল্যাগ bool zeroflag = 0; for (int i = 0; i < vec.size(); i++) { if (vec[i] == 0 && zeroflag == 0) continue; zeroflag = 1; cout << vec[i]; } return; } // main ব্লক int main() { string num = "14598499948265358486"; ll m = 487; quotientremainder(num, m); return 0; } আউটপুট
Remainder : 430 Quotient : 29976385930729688