Tôi hiểu đây là một vấn đề lập trình cổ điển và do đó tôi muốn rõ ràng tôi không tìm kiếm mã như một giải pháp, nhưng sẽ đánh giá cao sự thúc đẩy đúng hướng. Tôi đang học C++ và là một phần của quá trình học tập Tôi đang thử một số vấn đề về lập trình. Tôi đang cố gắng viết một chương trình có số lượng lên đến 1 tỷ. Rõ ràng đây sẽ là những con số khổng lồ và quá lớn để đối phó với việc sử dụng các phép toán số học bình thường. Bất kỳ dấu hiệu nào cho biết tôi nên đi theo hướng nào để cố gắng giải quyết loại vấn đề này sẽ được đánh giá cao.Tính giai thừa lớn trong C++
Tôi muốn cố gắng để giải quyết việc này mà không sử dụng các thư viện bổ sung nếu có thể
Cảm ơn
PS - vấn đề là ở đây http://www.codechef.com/problems/FCTRL
Dưới đây là phương pháp tôi sử dụng để giải quyết vấn đề , điều này đạt được bằng cách đọc các nhận xét bên dưới:
Giải pháp - Số 5 là yếu tố chính của bất kỳ số nào kết thúc bằng số không. Do đó, chia số thừa cho 5, đệ quy và thêm số lượng, bạn sẽ nhận được số lượng dấu 0 trong kết quả giai thừa
E.G. - Số lượng dấu 0 trong số 126! = 31
126/5 = 25 còn lại 1
25/5 = 5 còn lại 0
5/5 = 1 dư 0
25 + 5 + 1 = 31
Điều này phù hợp với bất kỳ giá trị nào, chỉ cần tiếp tục chia cho đến khi thương số ít hơn hơn 5
Dupe: http://stackoverflow.com/questions/1966077/calculate-the-factorial-of-an-arbitrarily-large-number-showing-all-the-digits –
Không thực sự là một sự lừa đảo. Vấn đề của OP có thể được giải quyết mà không biết bất kỳ chữ số nào của giai thừa :-) – ephemient
Không phải là sự lừa đảo, vì việc giải quyết vấn đề này bằng cách tính tất cả các chữ số của giai thừa không có cơ hội nhận được giới hạn 8 về vấn đề này. Tỷ lệ một tỷ nhấn 9 tỷ chữ số thập phân, vì vậy bạn sẽ thao tác khoảng 3-4GB dữ liệu. –