দুটি বড় সংখ্যা স্ট্রিং আকারে দেওয়া থাকলে তাদের গুণফল বের করতে হবে। সাধারণ গুণন পদ্ধতি ব্যবহার করে প্রতিটি অঙ্ক গুণ করে ক্যারি (carry) হ্যান্ডল করা হয়।
উদাহরণ
ইনপুট: "15", "2" → আউটপুট: "30"
ইনপুট: "34", "57" → আউটপুট: "1938"
অ্যালগরিদম
- দুটি স্ট্রিং নিন।
- ফলাফল স্ট্রিং আকার =
len1 + len2। - পিছন থেকে লুপ চালিয়ে প্রতিটি অঙ্ক গুণ করুন এবং ক্যারি হ্যান্ডল করুন।
- শেষে অপ্রয়োজনীয় লিডিং জিরো বাদ দিন।
সি++ ইমপ্লিমেন্টেশন
#include <bits/stdc++.h>
using namespace std;
string multiplyTwoNumbers(string num1, string num2) {
if (num1 == "0" || num2 == "0") return "0";
string product(num1.size() + num2.size(), '0');
for (int i = num1.size() - 1; i >= 0; i--) {
for (int j = num2.size() - 1; j >= 0; j--) {
int mul = (num1[i] - '0') * (num2[j] - '0') + (product[i + j + 1] - '0');
product[i + j + 1] = (mul % 10) + '0';
product[i + j] += mul / 10;
}
}
// লিডিং জিরো বাদ দিন
size_t pos = product.find_first_not_of('0');
return (pos != string::npos) ? product.substr(pos) : "0";
}
int main() {
string num1 = "34", num2 = "57";
// ঋণাত্মক হ্যান্ডলিং
bool neg = false;
if (num1[0] == '-' && num2[0] != '-') { neg = true; num1 = num1.substr(1); }
else if (num2[0] == '-' && num1[0] != '-') { neg = true; num2 = num2.substr(1); }
else if (num1[0] == '-' && num2[0] == '-') { num1 = num1.substr(1); num2 = num2.substr(1); }
string res = multiplyTwoNumbers(num1, num2);
if (neg && res != "0") cout << '-';
cout << res << endl;
return 0;
}
আউটপুট
1938