1379 - n的阶乘

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

输入一个正整数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;
}

Java解答

import java.util.*; 
import java.math.BigInteger; 
public class Main {

	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		while(cin.hasNext()){
			int n = cin.nextInt();
			
			BigInteger ans = BigInteger.ONE;
			for(int i=1;i<=n;i++){
				ans = ans.multiply(BigInteger.valueOf(i));
			}
			System.out.println(ans);
		}
	}
}

Python解答

import sys,math

for line in sys.stdin:
    a = int(line.split()[0])
    print math.factorial(a)