N!
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Problem Description
Given an integer N(0 ≤ N ≤ 10000),your task is to calculate N!
Input
One N in one line,process to the end of file.
Output
For each N,output N! in one line.
Sample Input
1 2 3
Sample Output
1 2 6
题意:题目意思,相信大家都能看懂,就是给你一个N,要你计算N的阶乘(N!)
解题思路:因为N!的值已经远远超过了int的范围,所以此题无疑要用到大数操作,而大数操作其实就是一个模拟计算过程的操作,亦是一种字符串操作,当然,若是会用Java的也可以不用如此麻烦,但是Java一般耗时比较长,不过用得好的话还是挺不错的。
当然,在此,我仅仅介绍一下c++的方法,Java可以搜一下大数,还是比较方便的
比如我们已经计算出8!,要计算9!的过程如下:
具体的看代码,若有不明白之处,可以提出
#pragma comment(linker,"/STACK:1024000000,1024000000") #include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<math.h> #include<vector> #include<map> #include<set> #include<stdlib.h> #include<cmath> #include<string> #include<algorithm> #include<iostream> #define exp 1e-10 using namespace std; const int N = 50005; const int inf = 1000000000; const int mod = 1000000007; int s[N]; int main() { int n,i,j,k,m,c; while(~scanf("%d",&n)) { memset(s,sizeof(s)); s[0]=k=1;c=0; for(i=2;i<=n;i++) { for(j=0;j<k;j++) { m=s[j]*i+c; s[j]=m%10; c=m/10; } while(c!=0) { s[k++]=c%10; c/=10; } } for(i=k-1;i>=0;i--) printf("%d",s[i]); puts(""); } return 0; }菜鸟成长记