首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-09-13 
大数运算(一)——N的阶乘注:本程序只适用于N10000的阶乘运算,N10000时已经跑得相当慢,超过了1s,只是推荐

大数运算(一) —— 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;}


热点排行