转载请注明出处: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 }