读书人

大数演算(一) N的阶乘

发布时间: 2012-09-13 09:51:53 作者: rapoo

大数运算(一) —— N的阶乘

注:本程序只适用于N<=10000的阶乘运算,N=10000时已经跑得相当慢,超过了1s,只是推荐一下自己的方法


10000!的结果大约有36000位,需要开一个至少为36000的数组


下面用实例来模拟一下我的方法:

输入N=6

0 1 2 3 4 5 6 7 8 9 10 11 12(数组指针)

i=1

1 0 0 0 0 0 0 0 0 0 0 0 0

i=2

2 0 0 0 0 0 0 0 0 0 0 0 0

i=3

6 0 0 0 0 0 0 0 0 0 0 0 0

i=4

24 0 0 0 0 0 0 0 0 0 0 0 0

4 2 0 0 0 0 0 0 0 0 0 0 0

i=5

20 10 0 0 0 0 0 0 0 0 0 0 0

0 12 0 0 0 0 0 0 0 0 0 0 0

0 2 1 0 0 0 0 0 0 0 0 0 0

i=6

0 12 6 0 0 0 0 0 0 0 0 0 0

0 2 7 0 0 0 0 0 0 0 0 0 0

输出:720


#include <iostream>#include <cstring>using namespace std;int main(){    int n;    int a[50000];    while(cin>>n)    {        memset(a,0,sizeof(a));        a[0]=1;        for(int i=1; i<=n; i++)        {            for(int j=0; j<i*4; j++)//将所有数字都乘i                a[j]*=i;            for(int j=0; j<i*4; j++)//进位                if(a[j]>9)                {                    a[j+1]+=a[j]/10;                    a[j]%=10;                }        }        int t;        for(int i=n*4; i>=0; i--)//忽略前导0        {            if(a[i]!=0)            {                t=i;                break;            }        }        for(int i=t; i>=0; i--)            cout<<a[i];        cout<<endl;    }    return 0;}


读书人网 >编程

热点推荐