मान लीजिए हमारे पास दो संख्याएं स्ट्रिंग के रूप में हैं। हमें उन्हें गुणा करना है और परिणाम को भी स्ट्रिंग में लौटाना है। इसलिए यदि संख्याएं "26" और "12" हैं, तो परिणाम "312" होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- दो आर्गुमेंट्स x और y लेना जो दर्शाता है x, y को विभाजित करता है
- यदि x < -Infinity और y = 1, तो इन्फिनिटी लौटाएं
- a := |x|, b := |y| और ans := 0
- जब तक a - b >= 0
- p := 0
- जब तक a - (b को 1 p बार लेफ्ट-शिफ्ट करके) >= 0
- p := p + 1
- a := a - (b को p बार लेफ्ट शिफ्ट करके)
- ans := ans + 1 को p बार लेफ्ट शिफ्ट करके
- यदि x > 0 सच है और y > 0 भी सच है, तो ans लौटाएं, अन्यथा (- ans) लौटाएं
उदाहरण (C++)
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -
#includeusing 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"