求n的阶乘,n可以无限大,该怎样解决这个问题???
求n的阶乘,n可以无限大,该怎样解决这个问题???希望可以给个思路或者代码,很感激!!!
[ 本帖最后由 water95 于 2015-6-23 09:18 编辑 ]
#include <iostream> #include <iomanip> using namespace std; int factorial(int n); int factorial1(int n); int main() { cout << setfill('0')<< setw(4) << 0 << endl; printf("%4.4ld",0); int i; for(i = 20; i <21; i++) { std::cout << i << " "; factorial(i); std::cout << " "; factorial1(i); std::cout<< std::endl; } return 0; } int factorial(int n) { const int baseNum = 10000; if( n < 0 ) return n; if( n <= 1 ) return 1; long a[100]; int num_a = 0; int carry = 0; // 进位 int i, j; a[0] = 1; for(i = 1; i <= n; i++) { carry = 0; for(j = 0; j <= num_a; j++) { a[j] = a[j] * i + carry; carry = a[j] / baseNum; a[j] %= baseNum; } if(carry > 0) { num_a++; a[num_a] = carry; // 进位存入数组下一个单元中 } } for(i = num_a; i >=0; i--) std::cout << setw(4) << a[i]; return 1; } int factorial1(int n) { long a[10000]; int i,j,c,m=0; a[0]=1; for(i=1;i<=n;i++) { c=0; for(j=0;j<=m;j++) { a[j]=a[j]*i+c; c=a[j]/10000; a[j]=a[j]%10000; } // printf("\n"); if(c>0) { m++; a[m]=c; } } printf("%ld",a[m]); for(i=m-1;i>=0;i--) printf("%4.4ld",a[i]); // return w; }