1379 - n的阶乘
输入一个正整数n,输出n的阶乘。
题目输入
正整数n(0<=n<=20)
题目输出
输入可能包括多组数据,对于每一组输入数据,输出n的阶乘
输入/输出样例
题目输入
4 5 15
题目输出
24 120 1307674368000
C语言解答
#include<stdio.h> int main() { int n,i; double sum; while(scanf("%d",&n)!=EOF) { sum=1.0; for(i=1;i<=n;i++) { sum=sum*i; } printf("%.0lf\n",sum); } return 0; }
C++解答
#include <stdio.h> #include <string.h> typedef struct{ int nums[3300]; int length; }BigInteger; BigInteger Create(int num){ BigInteger ans; ans.length = 0; while(num){ ans.nums[ans.length++] = num%10; num /= 10; } return ans; } BigInteger Multiply(BigInteger num1, BigInteger num2){ BigInteger ans; memset(ans.nums, 0, sizeof(ans.nums)); ans.length = 0; for(int i=0; i<num1.length; i++){ for(int j=0; j<num2.length; j++){ ans.nums[i+j] += num1.nums[i]*num2.nums[j]; } } while(ans.length<num1.length+num2.length-1 || ans.nums[ans.length]){ ans.nums[ans.length+1] += ans.nums[ans.length]/10; ans.nums[ans.length] %= 10; ans.length++; } return ans; } void Print(BigInteger num){ if(num.length == 0){ printf("0"); } int i = num.length; while(i--){ printf("%d", num.nums[i]); } } BigInteger ans[1100]; int main(){ int n; ans[0] = Create(1); ans[1] = Create(1); for(int i=2; i<1100; i++){ ans[i] = Multiply(ans[i-1], Create(i)); } while(scanf("%d", &n) != EOF){ Print(ans[n]); putchar('\n'); } return 0; }