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

时间限制 1 秒
内存限制 32 MB
讨论 统计
上一题 下一题