20以内的阶乘用long long长整型存储即可
long long 为64位整数类型,一般的long long为64位,由于负数补码的原因,第一位作为符号位,因此有63位可用。则取值范围为-2^63到2^63-1

  • 20的阶乘有19位数,等于2432902008176640000
  • 2^63-1=9223372036854775807(19位数字)
    所以使用long long数据类型最多存储20的阶乘,超过20的会溢出
    #include <iostream>
    #include <cstdio>
    using namespace std;
    typedef long long ll;
    int main(){
      int m, n;
      scanf("%d", &m);
      while(m--){
          scanf("%d", &n);
          ll ans = 1;
          for(int i = 1; i <= n; i++){
              ans = ans * i;
          }
          printf("%lld\n", ans);
      }
      return 0;
    }