दो संख्याएं स्ट्रिंग फॉर्मेट में दी गई हैं। हमें उन्हें गुणा करना है। समस्या को हल करने का विचार पिछले अंक के गुणनफल के उत्तर और कैरी को बनाए रखना है। हम अगले सेट के अंकों के गुणनफल को प्राप्त करने के लिए पिछले अंकों के गुणनफल के उत्तर और कैरी का उपयोग कर सकते हैं।
आइए एक उदाहरण देखते हैं।
इनपुट
15 2
आउटपुट
30
एल्गोरिदम
- संख्याओं को स्ट्रिंग में आरंभ करें।
- संख्या_एक_लंबाई + संख्या_दो_लंबाई लंबाई की एक स्ट्रिंग आरंभ करें।
- पहली संख्या पर अंत से पुनरावृति करें।
- दूसरी संख्या पर अंत से पुनरावृति करें।
- दो अंकों को गुणा करें और संबंधित पिछली पंक्ति के अंक को जोड़ें।
- पिछली पंक्ति के अंक को अपडेट करें।
- कैरी को परिणाम स्ट्रिंग के पिछले इंडेक्स में स्टोर करें।
कार्यान्वयन
निम्नलिखित C++ में उपरोक्त एल्गोरिदम का कार्यान्वयन है:
#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 n = (num1[i] - '0') * (num2[j] - '0') + product[i + j + 1];
product[i + j + 1] = n % 10;
product[i + j] += n / 10;
}
}
for (int i = 0; i < product.size(); i++) {
product[i] += '0';
}
if (product[0] == '0') {
return product.substr(1);
}
return product;
}
int main() {
string num1 = "34";
string num2 = "57";
if((num1.at(0) == '-' || num2.at(0) == '-') && (num1.at(0) != '-' || num2.at(0) != '-')) {
cout << "-";
}
if(num1.at(0) == '-') {
num1 = num1.substr(1);
}
if(num2.at(0) == '-') {
num2 = num2.substr(1);
}
cout << multiplyTwoNumbers(num1, num2) << endl;
return 0;
}
आउटपुट
यदि आप उपरोक्त कोड चलाते हैं, तो आपको निम्नलिखित परिणाम मिलेगा।
1938