刷题篇-1

1. 计算阶乘

描述

给定 T 个正整数 n,请你计算 n! mod (109+7) 的值并输出。

输入描述:

第一行输入一个整数 T(1≦T≦103)表示测试数据数量。
接下来 T 行,每行输入一个整数 n(1≦n≦106)n(1≦n≦106)。

输出描述:

输出共 T 行,其中第 i 行输出 ni! mod 1 000 000 007 的结果。

#include <iostream>

#include <vector>

using namespace std;

const int MOD = 1000000007;

vector<int> arr={1};

int func(int n, vector<int> &arr){

if (n < arr.size()) return arr[n];

int cur = arr.size();

arr.resize(n+1);

for (int i = cur; i <= n; i++){

arr[i] = (long long)arr[i-1] * i % MOD;

}

return arr[n];

}


int main() {

int t;

cin >> t;

while (t--){

int n;

cin >> n;

cout << func(n, arr) << endl;;

}

return 0;

}