Giả sử có hai số dưới dạng chuỗi. Ta phải nhân chúng và trả về kết quả cũng dưới dạng chuỗi. Vì vậy nếu các số là "28" và "25", kết quả sẽ là "700".
Để giải quyết, ta làm theo các bước sau:
- Nhận hai đối số x và y chỉ x chia y (nhấn mạnh: code thực hiện nhân số lớn dạng chuỗi)
- Khởi tạo mảng kết quả kích thước n+m với '0'
- Duyệt từ cuối chuỗi 1 và chuỗi 2, nhân từng cặp chữ số, cộng dồn vào vị trí tương ứng trong mảng kết quả, xử lý nhớ
- Bỏ qua các '0' đầu, trả về chuỗi kết quả
Hãy xem triển khai sau để hiểu rõ hơn:
Ví dụ
#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";
}
int main() {
Solution ob;
cout << ob.multiply("28", "25");
return 0;
}
Đầu vào
"28", "25"
Đầu ra
"700"