提示:注意输出结果可能超32位整型。
#include<iostream>
using namespace std;
int main(){
int m,n;
cin>>m;
for(int i=0;i<m;i++){
cin>>n;
long long total=1;
for(int j=1;j<=n;j++)
total*=j;
cout<<total<<endl;
}
} #include<iostream>
using namespace std;
long long mutiple_sum(int n)
{
long long sum = 1;
for(int i = 1;i <= n;i++)
sum *= i;
return sum;
}
int main(void)
{
int m;
while(cin >> m)
{
while(m--)
{
int n;
cin >> n;
long long sum = mutiple_sum(n);
cout << sum << endl;
}
}
return 0;
} import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
for (int i = 0; i < m; i++) {
int n = scanner.nextInt();
BigInteger res = BigInteger.ONE;
for (int j = 1; j <= n; j++) {
res = res.multiply(new BigInteger(j+""));
}
System.out.println(res);
}
}
} #include<stdio.h>
int main()
{
int m,i,j,n,d,crray,temp,a[100]={0};//d代表位数,temp做过渡,crray做进位数
scanf("%d",&m);
while(m--)
{
d=1;a[0]=1;
scanf("%d",&n);
for(i=1;i<=n;i++)//n的阶乘
{
for(j=0,crray=0;j<d;j++)//a[0]是个位
{
temp=a[j]*i+crray;
a[j]=temp%10;
crray=temp/10;
}
while(crray)
{
a[d]=crray%10;
crray=crray/10;
d++;
}
}
for(i=d-1;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
return 0;
} #include <cstdio>
long long int Factorial(int n){
if(n == 0 || n == 1){
return n;
}else{
return n*Factorial(n-1);
}
}
int main(){
int m;
while(scanf("%d",&m) != EOF){
for(int i = 0; i < m; ++i){
int n;
scanf("%d",&n);
printf("%lld\n",Factorial(n));
}
}
return 0;
} #include<iostream>
using namespace std;
int main()
{
int m;
cin>>m;
while(m--)
{
int n;
cin>>n;
long int res=1;
for(int i=2;i<=n;i++)
res*=i;
cout<<res<<endl;
}
} #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 500000
void mtp(char *, int);
int main()
{
int m;
char str[MAXSIZE] = {0};
while(~scanf("%d", &m))
{
for(int k = 0; k < m; k++)
{
int n;
scanf("%d", &n);
memset(str, 0, MAXSIZE);
str[0] = '1';
for(int i = 2; i <= n; i++)
mtp(str, i);
int len = strlen(str);
for(int i = len - 1; i >= 0; i--)
printf("%c", str[i]);
putchar(10);
}
}
return 0;
}
void mtp(char str[], int n)
{
int count = 0, len = strlen(str);
for(int i = 0; i < len; i++)
{
int tmp = (str[i] - '0') * n + count;
count = tmp / 10;
str[i] = tmp % 10 + '0';
}
while(count)
{
str[len++] = (count % 10) + '0';
count /= 10;
}
str[len] = '\0';
}
至少可计算30000以上的阶乘。#include<stdio.h>
int main(void)
{
int m;
while(scanf("%d",&m)!=1||m<0)
{
while(getchar()!='\n')
continue;
}
for (int i=0;i<m;i++)
{
int x;
while(scanf("%d",&x)!=1||x<1||x>20)
{
while(getchar()!='\n')
continue;
}
int j;
__int64_t sum=1;
for(j=1;j<=x;j++)
sum=sum*j;
printf("%lld\n",sum);
}
return 0;
} #include <iostream>
using namespace std;
int main() {
string arr[] = {"1", "2", "6", "24", "120", "720", "5040", "40320", "362880", "3628800", "39916800", "479001600",
"6227020800", "87178291200", "1307674368000", "20922789888000", "355687428096000",
"6402373705728000", "121645100408832000", "2432902008176640000"};
int m, n;
cin >> m;
for (int i = 0; i < m; ++i) {
cin >> n;
cout << arr[n - 1] << endl;
}
return 0;
} #include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
long long k=1;
for(int i=0;i<n;i++)
{
k=1;
for(int j=1;j<=a[i];j++)
{
k=k*j;
}
printf("%lld\n",k);
}
} #include<iostream>
using namespace std;
int main()
{
int m;
cin>>m;
for(int i=0;i<m;++i)
{
int n;
long long sum=1;
cin>>n;
for(int j=1;j<=n;++j)
sum*=j;
cout<<sum<<endl;
}
return 0;
}