HDU 1042 N!

来源:互联网 发布:cf卡数据恢复软件 mac 编辑:程序博客网 时间:2024/06/08 20:13

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042

N!

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 57467    Accepted Submission(s): 16273


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
123
 

Sample Output
126
 
单精度乘高精度题,模拟手工乘法即可。

#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<iostream>#include<algorithm>#include<sstream>#include<vector>#include<map>#include<stack>#include<list>#include<set>#include<queue>#define LL long long#define lson l,m,rt<<1#define rson m+1,r,rt<<1 | 1using namespace std;const int maxn=100005,maxe=100005,inf=1<<29;int n,m,a[maxn];void f(){    if(!n) {printf("1\n");return ;}    int k=0;    m=n;    while(m) a[++k]=m%10,m/=10;    for(int i=n-1;i>=2;i--)    {        int w=0;        for(int j=1;j<=k;j++)        {            a[j]=a[j]*i+w;            w=a[j]/10;            a[j]%=10;        }        while(w) a[++k]=w%10,w/=10;    }    while(k) printf("%d",a[k--]);    printf("\n");}int main(){    while(~scanf("%d",&n)) f();    return 0;}


0 0
原创粉丝点击