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; }
作者:appte 发表于2013-3-4 22:42:24 原文链接
阅读:32 评论:0 查看评论