HDU 1042 N!(大数)

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;
}
菜鸟成长记

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...