[Lý Thuyết Số - Toán Học]. Bài 14. Trailing zero

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
Input: stdin
Output: stdout

Nguồn bài:
28Tech
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

In ra số lượng chữ số 0 liên tiếp tính từ cuối của N!

Ví dụ bạn có N = 10, 10!= 3628800. Như vậy, 10! có 2 chữ số 0 liên tiếp tính từ cuối.

Tham khảo lý thuyết : Bậc Của Thừa Số Nguyên Tố Trong N!


Đầu vào

Dòng duy nhất chứa số nguyên dương N


Giới hạn

1≤N≤10^18


Đầu ra

In ra số lượng chữ số 0 liên tiếp tính từ cuối của N!. Kết quả lấy dư với 1000000007.


Ví dụ :

Input 01
10
Output 01
2

Bình luận

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



  • 0
    Hamazaki  đã bình luận lúc 7, Tháng 4, 2025, 14:22

    include <bits/stdc++.h>

    using namespace std;

    long long LaySo5(long long n) { if (n == 0) return 0; return n / 5 + LaySo5(n / 5); }

    int main() { iosbase::syncwith_stdio(false); cin.tie(NULL);

    long long n;
    cin >> n;
    
    cout << LaySo5(n);
    return 0;
    

    } Mọi người giúp mình với chứ bài của mình chỉ đúng 9/50 là sao ạ


    • 0
      bengokyeuanh99  đã bình luận lúc 7, Tháng 4, 2025, 14:37

      Code của fen dùng hàm LaySo5 gọi đệ quy liên tục (LaySo5(n / 5)), với n lớn như 10^18 thì số lần gọi có thể lên tới hàng chục lần nên gây stack overflow hoặc timeout với đề bài bắt buộc bạn phải lấy kết quả mod 1000000007, nhưng code fen không làm điều này Code đemo này

      include <bits/stdc++.h>

      using namespace std;

      const long long MOD = 1e9 + 7;

      int main() { iosbase::syncwith_stdio(false); cin.tie(NULL);

      long long n, res = 0;
      cin >> n;
      
      while (n) {
          n /= 5;
          res = (res + n) % MOD;
      }
      
      cout << res;
      return 0;
      

      }