提示:注意输出结果可能超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 <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; }