大数阶乘

转载请注明出处:http://www.cnblogs.com/zhishoumuguinian/p/8424486.html

 

 1 #include <iostream>
 2 #include <math.h>
 3 #include <stdlib.h>
 4 #include <string.h>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int i;
10     int a[99999]={0};
11     char n[20];
12     cin>>n;//读进来一个数,保存为字符串
13     int m=atoi(n);//利用函数将字符串n转为整数m
14     if(m==0)
15     {
16         cout<<1;
17         return 0;
18     }
19     a[0]=strlen(n);//a[0]是数字位数
20     for(i=1; i<=a[0]; i++)//将n保存到a数组中,倒置
21     {
22         a[i]=n[a[0]-i]-'0';
23     }
24     for(int j=m-1; j>0; j--)//n的阶乘的每位数,循环体就是高精度计算里的高精度数乘整数
25     {
26         for(i=1; i<=a[0]; i++)//先把每位乘
27         {
28             a[i]*=j;
29         }
30         for(i=1; i<=a[0]; i++)
31         {
32             a[i+1]+=a[i]/10;//进位
33             a[i]=a[i]%10;
34         }
35         while(a[i]>0)//处理最后一位数
36         {
37             a[i+1]+=a[i]/10;
38             a[i]=a[i]%10;
39             i++;
40             a[0]++;
41         }
42     }
43     for(i=a[0]; i>0; i--)//到着输出
44     {
45         cout<<a[i];
46     }
47 }

 

posted @ 2018-02-06 22:11  nefuer  阅读(152)  评论(0编辑  收藏  举报