สมมติว่าเรามีตัวเลขสองตัวเป็นสตริง เราต้องคูณมันและส่งคืนผลลัพธ์เป็นสตริงด้วย ดังนั้นหากตัวเลขเป็น “28” และ “25” ผลลัพธ์จะเป็น “700”
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
รับสองอาร์กิวเมนต์ x และ y มันบ่งชี้ว่า x หาร y
-
ถ้า x <−Infinity และ y =1 ให้คืนค่าอนันต์
-
a :=|x|, b :=|y| และคำตอบ :=0
-
ในขณะที่ a − b>=0
-
p :=0
-
ในขณะที่ a − (เลื่อนซ้าย b (เลื่อนซ้าย 1 p ครั้ง))>=0
-
p :=p + 1
-
-
a :=a − (เลื่อนซ้าย b, p ครั้ง)
-
ans :=ans + shift ซ้าย 1 p ครั้ง
-
-
ถ้า x> 0 เป็นจริง และ y> 0 เป็นจริงด้วย ให้คืนค่า ans มิฉะนั้น ให้คืนค่า (− ans)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#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"); }
อินพุต
"28", "25"
ผลลัพธ์
"700"