HDU 1042 N!(大数)

来源:互联网 发布:qt creator python 编辑:程序博客网 时间:2024/05/03 20:16

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
123
 

Sample Output
126
 
/************************************************************************/

题意:题目意思,相信大家都能看懂,就是给你一个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-10using 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,0,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;}
菜鸟成长记

0 0