Hướng dẫn giải
Read the intended approach and key ideas behind this problem.
Hãy nhớ chỉ sử dụng editorial này khi thật sự bị bí, và tuyệt đối không sao chép–dán code từ đó. Hãy tôn trọng tác giả bài toán và người viết lời giải.

Nộp lời giải chính thức trước khi tự mình giải được bài là hành vi có thể bị cấm (ban).
Tác giả: a3 rách

Tổng quan

Vì kết quả của phép toán tối đa vào khoảng \(10^{10} * 10^{120} = 10^{1200}\), tốt nhất ta nên biểu diễn các số được nhập vào trong bài này dưới dạng xâu kí tự.

Ta thực hiện phép nhân hai số lớn theo các nguyên tắc của nhân hai số tự nhiên đã học ở bậc Tiểu học.

Các bước thực hiện:

  • Chuyển \(S_1\)\(S_2\) được nhập vào từ xâu thành mảng.
  • Khởi tạo mảng kết quả \(ans\) chỉ toàn các số 0.
  • Duyệt từ phải qua trái: với mỗi chữ số của \(S_2\), ta nhân với chữ số hàng đơn vị tương ứng ở \(S_1\), được bao nhiêu thì thêm kết quả vào \(ans\).
  • In ra mảng \(ans\) theo thứ tự từ cuối lên là kết quả của phép toán. Chú ý không in ra các số \(0\) ở đầu.

Ngoài ra, ngôn ngữ Python mặc định có khả năng xử lý các số rất lớn. Vậy nên ta chỉ cần thực hiện phép nhân \({S_1} * {S_2}\) bằng toán tử nhân có sẵn.

Lời giải (C++)

#include <bits/stdc++.h>
using namespace std;
string s1, s2;
vector<int> x, y, ans;
int main(){
    cin.tie(0) -> sync_with_stdio(0); cout.tie(0);
    cin >> s1 >> s2;

    int m = s1.size(), n = s2.size();

    x.assign (m, 0);
    for (int i = 0; i < m; i++) x[i] = s1[m - i - 1] - '0';
    y.assign (n, 0);
    for (int i = 0; i < n; i++) y[i] = s2[n - i - 1] - '0';
    ans.assign (m + n, 0);

    for (int i = 0; i < n; i++) {
        int nho = 0;
        for (int j = 0; j < m; j++) {
            int t = x[j] * y[i] + nho + ans[i + j];
            nho = t / 10;
            ans[i + j] = t % 10;
        }
        ans[i + m] = nho;
    }

    while (ans.size() && !ans.back()) ans.pop_back();
    reverse (begin(ans), end(ans));

    for (int i : ans) cout << i;
}

Lời giải (Python)

print (int(input()) * int(input()))

Chú ý: Input trong bài này mặc định là 2 dòng tương ứng 2 số \(S_1\)\(S_2\). Nếu input có cả 2 số cùng ở trên 1 dòng, ta cần dùng input().split().

s1, s2 = map (int, input().split())
print (s1 * s2)

Nhận xét Tham gia thảo luận bên dưới.
đã bình luận vào Tháng bảy 28, 2025, 10:25 a.m.

.

đã bình luận vào Tháng bảy 25, 2025, 8:25 a.m.

nhât ngu

đã bình luận vào Tháng bảy 24, 2025, 3:31 p.m.

I have an ugly black girl

đã bình luận vào Tháng bảy 24, 2025, 3:31 p.m.

I have an ugly black girl

đã bình luận vào Tháng bảy 13, 2025, 10:35 a.m.

python là đơn giản nhất luôn -)

đã bình luận vào Tháng sáu 22, 2025, 10:56 a.m.

xịn xịn :)))))