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; }