C Bài 18.F1: Tích các số


Submit solution

Points: 40 (partial)
Time limit: 1.0s
Memory limit: 20M

Author:
Problem type

Bạn được cung cấp xâu \(x\) là kí tự viết hoa hoặc thường và số. Hãy ghép các chữ số cạnh nhau thành 1 số và nhân chúng lại với nhau. Vì kết quả có thể rất lớn, bạn cần in ra phần dư của kết quả khi chia cho \(10^9+7\).

INPUT FORMAT

1 dòng gồm 1 xâu \(x\).

OUTPUT FORMAT

In ra 1 số nguyên là phần dư của kết quả khi chia cho \(10^9+7\).

Ví dụ:

Input
z123A5
Output
615
Giải thích ví dụ mẫu
Ví dụ 1

Input: z123A5
Giải thích: Ghép các chữ số thành 1235 và tính tích, kết quả là 615 khi chia cho \(10^9 + 7\).

Lời giải bài tập này: Tại đây

Group giải đáp thắc mắc: Lập trình 24h

Fanpage CLB: CLB lập trình Full House- Việt Nam

Youtube: CLB Lập Trình Full House


Comments


  • 0
    endc67_fullhouse_dev  commented on Jan. 5, 2025, 7:26 a.m.
    /*
        By HoVuVietTruong
        05/01/2024
    */
    #include <bits/stdc++.h>
    using namespace std;
    
    const long long mod = 1e9 + 7;
    void solve()
    {
    
        string s;
        cin >> s;
    
        long long t = 0;
        long long ans = 1;
    
        int n = s.size();
        s = ' ' + s + ' ';
    
    
        vector<long long> v;
        for (int i = 1; i <= n + 1; i++)
        {
            if (s[i] == '0' && (s[i + 1] < '0' || s[i + 1] > '9'))
            {
                cout << 0;
                return;
            }
            if (s[i] >= '0' && s[i] <= '9') t = (t * 10 + s[i] - '0') % mod;
            else
            {
                if (t != 0) v.push_back(t);
                t = 0;
            }
    
        }
    
        for (auto i : v)
            ans =  (ans * (i % mod)) % mod;
        cout << ans;
    
    }
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
    
        int t = 1;
        while(t--) solve();
    
    }
    
Zalo