Java AC代码:
用Java A这道题只花了1000MS !!!(题目限定在5000MS内)
import java.util.Scanner;
import java.math.BigInteger;
public class Hdoj1042 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n;
BigInteger m;
while(scanner.hasNextBigInteger()){
n=scanner.nextInt();
m=BigInteger.ONE;
for(int i=2;i<=n;i++)
m=m.multiply(BigInteger.valueOf(i));
System.out.println(m);
}
}
}
C++代码:
这个C++代码是改编自刘汝佳老师的白皮书上的一个阶乘的算法。确实很佩服刘老师,不过用C++写的花了3765MS 。
//hdoj1042.cpp
#include<iostream>
#include<string>
using namespace std;
const int MAXN=36000;//求10000!数组要36000才行
int a[MAXN];
int main(){
int n,i,j;
while(scanf("%d",&n)!=EOF){
memset(a,0,sizeof(a));
a[0]=1;
for(i=2;i<=n;i++){
int c=0;
for(j=0;j<MAXN;j++){//这一段技巧性很强,要自己动手测试几个数据就能看懂了
int s=a[j]*i+c;
a[j]=s%10;
c=s/10;
}
}
for(j=MAXN-1;j>=0;j--)
if(a[j])
break;
for(i=j;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
return 0;
}