MULBIG - Nhân 2 số nguyên lớn

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Cho hai số nguyên không âm ~a~ và ~b~. Hãy tính ~a × b~.

Input

  • Dòng đầu chứa số ~a~.
  • Dòng sau chứa số ~b~.

Giới hạn:

  • ~0 \le a, b < 10^{1000} (a, b\text{ có không quá }1000\text{ chữ số})~

Output

  • Gồm một dòng duy nhất là kết quả của ~a × b~.

Sample

Input #1
123
4567
Output #1
561741
Input #2
1234567890
9879879876543219876
Output #2
12197382452637423456119381640

Problem source: Chuyên Sơn La Online Judge


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    gtmailong  đã bình luận lúc 29, Tháng 4, 2024, 23:11

    c++

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    void nhan2solon(string a,string b){
        if (a == "0" || b == "0") {
            cout << "0";
            return;
        }
        int i,j,nho;
        int n = a.size();
        int m = b.size();
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());
        char c[n+m];
        memset(c,'0',sizeof(c));
        for (i = 0; i < n; i++){
            nho = 0;
            for (j = 0; j < m; j++){
                int x =(a[i] - '0') * (b[j] - '0') + (c[i+j] - '0') + nho;
                c[i+j] = (x% 10) + '0';
                nho = x/ 10;
            }
            if (nho > 0)
                c[i+j] = nho + '0';
        }
        if (c[m+n-1] != '0'){
            c[m+n] = '\0';
            reverse(c,c+m+n);
        }
        else{
            c[m+n-1] = '\0';
            reverse(c,c+m+n-1);
        }
        cout << c;
    }
    
    int main() {
        string a,b;
        cin >> a >> b;
        nhan2solon(a,b);
        return 0;
    }
    

  • -2
    sashimivssushi  đã bình luận lúc 7, Tháng 2, 2024, 6:07

    #include <bits/stdc++.h> #define ll long long #define vt vector #define sti string

    using namespace std;

    int main() {

    //freopen("input.inp", "r", stdin); //freopen("output.out", "w", stdout);

    iosbase::syncwith_stdio(false); cin.tie(nullptr); cout.tie(nullptr);

    sti a, b; cin >> a >> b;

    if (a == "0" || b == "0"){ cout << 0; return 0; }

    vector<int> v (a.size() + b.size(), 0); for(int i = a.size() - 1; i >= 0; --i) for(int j = b.size()-1; j >= 0; --j){ int t = (a[i] - '0') * (b[j] - '0'), p1 = i + j, p2 = i + j + 1, tong = t + v[p2]; v[p1] += tong / 10; v[p2] = tong % 10; } sti kq; for(int i : v) if (!(kq.empty() && i == 0)) kq += char(i + '0'); cout << (kq.empty() ? "0" : kq);

    return 0; }