Giúp đỡ bài tập C++: in 9 chứ số đầu tiên của 2018! ra màn hình

Thầy giáo e có cho bài về nhà là: in 9 chứ số đầu tiên của 2018! ra màn hình.
Mọi ng giúp em với

#include <iostream>
int main() {
    std::cout << 946691950 << std::endl;
}
2 Likes

bạn hưỡng dẫn cụ thể được ko bạn, sao lại có đưucọ số đó vậy

Gõ đoạn code Python rồi lưu thành file với tên bất kì, như fact.py

def fact(n):
  r = 1
  i = 2
  while i <= n:
    r = r * i
    i += 1
  return r

print(fact(2018))

Vô terminal, gõ tiếp lệnh python fact.py, được số dài loằng ngoằng:

946691950791061334102088955196070080707665381264465294319235382...

Cuối cùng, copy 9 số đầu bỏ vào C++ :v

2 Likes

Cứ nhân thả ga rồi cắt 9 chữ số chắc cũng được nhỉ, nó tràn số kệ nó.
Edit: lộn, cắt 9 số đầu tiên thì gay go rồi.

2 Likes

20 dòng :V :V :V :V
thật ra có ~10 dòng :V

#include <iostream>
#include <string>
#include <cstdint>
using BN = std::basic_string<uint64_t>;
const uint64_t E9 = 1000000000;
BN& operator*=(BN& n, uint32_t m)
{
    for (auto& x : n) x *= m;
    for (size_t i = 0; i < n.size() - 1; ++i) n[i + 1] += n[i] / E9, n[i] %= E9;
    if (n.back() > E9) n += n.back() / E9, end(n)[-2] %= E9;
    return n;
}
int main()
{
    BN n{1};
    for (uint32_t i = 1; i <= 2018; ++i) n *= i;
    auto first9digits = end(n)[-1] * E9 + end(n)[-2];
    while (first9digits >= E9) first9digits /= 10;
    std::cout << first9digits << "\n";
}
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?