मान लीजिए कि हमारे पास एक स्ट्रिंग के रूप में दो संख्याएं हैं। हमें उन्हें गुणा करना है और परिणाम को भी एक स्ट्रिंग में वापस करना है। इसलिए यदि संख्याएं "26" और "12" हैं, तो परिणाम "312" होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- दो तर्क x और y लेते हुए यह इंगित करता है कि x, y को विभाजित करता है
- अगर x <-इन्फिनिटी और y =1 है, तो रिटर्न इनफिनिटी
- a :=|x|, b :=|y| और उत्तर :=0
- जबकि a - b>=0
- p :=0
- जबकि ए - (बाएं-शिफ्ट किया गया बी (बाएं-शिफ्ट 1 पी बार))>=0
- p :=p + 1
- a :=a – (बाएं शिफ्ट b, p बार)
- Ans :=ans + लेफ्ट शिफ्ट 1 p बार
- यदि x> 0 सत्य है और y> 0 भी सत्य है, तो उत्तर दें, अन्यथा वापस लौटें (- उत्तर)
उदाहरण(C++)
एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: string multiply(string num1, string num2); }; string Solution::multiply(string nums1, string nums2) { int n = nums1.size(); int m = nums2.size(); string ans(n + m, '0'); for(int i = n - 1; i>=0; i--){ for(int j = m - 1; j >= 0; j--){ int p = (nums1[i] - '0') * (nums2[j] - '0') + (ans[i + j + 1] - '0'); ans[i+j+1] = p % 10 + '0'; ans[i+j] += p / 10 ; } } for(int i = 0; i < m + n; i++){ if(ans[i] !='0')return ans.substr(i); } return "0"; } main(){ Solution ob; cout << ob.multiply("28", "25"); }
इनपुट
"26" "12"
आउटपुट
"312"