首页 > ACM题库 > 九度OJ > 九度-1076-N的阶乘[解题代码]
2013
12-12

九度-1076-N的阶乘[解题代码]

题目来源:2006年清华大学计算机研究生机试真题

题目描述:

 输入一个正整数N,输出N的阶乘。

输入:

正整数N(0<=N<=1000)

输出:

 输入可能包括多组数据,对于每一组输入数据,输出N的阶乘

样例输入:
4
5
15
样例输出:
24
120
1307674368000

cpp 代码如下:
#include <stdio.h>
int big[1001][800],len[1001],BASE=10000;
int i,j,tmp,up,n;
void print(int n){
	printf("%d",big[n][len[n]-1]);
	for(i=len[n]-2; i >= 0; i--)printf("%04d",big[n][i]);
	printf("\n");
}
int main(){
	big[0][0] = big[1][0] = len[0] = len[1] = 1;
	for(i=2; i<=1000; i++){
		up = 0;
		for(j=0; j<len[i-1]; j++){
			tmp = up + i * big[i-1][j];
			up = tmp / BASE;
			tmp = tmp % BASE;
			big[i][j] = tmp;
		}
		if(up > 0){ big[i][j] = up;len[i] = j+1; }
		else len[i] = j;
	}
	while(~scanf("%d",&n))print(n);
	return 0;
}
/**************************************************************
	Problem: 1076
	User: coder
	Language: C
	Result: Accepted
	Time:110 ms
	Memory:4044 kb
****************************************************************/

java 代码如下:

import java.math.BigInteger;
import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		while(s.hasNextInt()){
			int n = s.nextInt();
			BigInteger sum = new BigInteger("1");
			while(n>1){
				BigInteger b1 = new BigInteger(n+"");
				sum = sum.multiply(b1);
				n--;
			}
			System.out.println(sum.toString());
		}
	}

}

/**************************************************************
	Problem: 1076
	User: coder
	Language: Java
	Result: Accepted
	Time:7680 ms
	Memory:112908 kb
****************************************************************/


  1. 第一题是不是可以这样想,生了n孩子的家庭等价于n个家庭各生了一个1个孩子,这样最后男女的比例还是1:1