标签:
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1042
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<10000)
方法:用数组储存数,因为位数太多,每位存5个数
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <stack> #include <queue> #include <vector> using namespace std; #define N 10010 #define met(a,b) memset(a,b,sizeof(a)); vector<vector<int> >Q; int a[N],n; void add(int m) { for(int i=0;i<N;i++) { a[i]=a[i]*m; } for(int i=0;i<N-1;i++) { a[i+1]+=a[i]/10000; a[i]=a[i]%10000; } } void put(int a[]) { int i=N-1; while(!a[i])i--; printf("%d",a[i]); for(i--;i>=0;i--) printf("%04d",a[i]); puts(""); } void init() { a[0]=1; for(int i=1;i<=n;i++) { add(i); } } int main() { while(scanf("%d",&n)!=EOF) { if(n==0) { printf("1\n"); continue; } met(a,0); init(); put(a); } return 0; }
标签:
原文地址:http://www.cnblogs.com/jun939026567/p/5788835.html