Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <iomanip>
- #include <string>
- #include <vector>
- void mult (std::vector<unsigned long long>& num, unsigned int m) {
- unsigned long long mem = 0;
- unsigned long long thirteen_digits = 10000000000000;
- for (size_t i = 0; i < num.size(); ++i) {
- unsigned long long sum = num[i] * m + mem;
- num[i] = sum % thirteen_digits;
- mem = sum / thirteen_digits;
- }
- if (mem > 0) {
- num.push_back(mem % thirteen_digits);
- }
- }
- std::vector<unsigned long long> factorial(int n) {
- std::vector<unsigned long long> res = {1};
- res.reserve(1 << 16);
- for (unsigned int i = 1; i <= n; ++i) {
- mult(res, i);
- }
- return res;
- }
- int main() {
- std::ifstream in("input.txt");
- std::ofstream out("output.txt");
- std::string s;
- in >> s;
- std::vector<unsigned long long> res = factorial(std::stoi(s));
- out << res.back();
- for (auto i = ++res.rbegin(); i != res.rend(); ++i) {
- out << std::setfill('0') << std::setw(13) << *i;
- }
- out << "\n";
- in.close();
- out.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement