读书人

这个计算阶乘的算法叫什么?小弟我也没

发布时间: 2012-03-13 11:21:12 作者: rapoo

这个计算阶乘的算法叫什么?我也没怎么懂

C/C++ code
/* factorial.cpp -- 利用数组计算阶乘 */#include <iostream>using namespace std;int main(void){  const int MAXSIZE = 100;  int array[MAXSIZE];  int n;  cout <<"n = ";  cin >>n;  int sum, sc;  int i, j;  for (i = 0; i < MAXSIZE; i++)    array[i] = 0;  array[0] = 1;  for (i = 2; i <= n; i++)    {      sc = 0;      for (j = 0; j < MAXSIZE; j++)    {      sum = array[j] * i + sc; // 上一次进位值和当前计算结果求和      sc = sum / 10; // 存放进位数值      array[j] = sum % 10; // 将余数存入对应数组元素    }    }  cout <<n <<"! = ";  for (i = MAXSIZE - 1; i >=0; i--)    cout <<array[i];  cout <<endl;  return 0;}


计算阶乘的~~~

[解决办法]
一种特定的“大数相乘”

大数相乘的英文叫法:arbitrary-precision arithmetic/bignum arithmetic
[解决办法]
改为这样,会更快:


C/C++ code
/* factorial.cpp -- 利用数组计算阶乘 */#include <iostream>using namespace std;int main(void){  const int MAXSIZE = 100;  int array[MAXSIZE];  int n;  cout <<"n = ";  cin >>n;  int sum, sc;  int i, j, k;  for (i = 0; i < MAXSIZE; i++)    array[i] = 0;  array[0] = 1;  k = 1;  for (i = 2; i <= n; i++)    {      sc = 0;      for (j = 0; j < k; j++)      {      sum = array[j] * i + sc; // 上一次进位值和当前计算结果求和      sc = sum / 10; // 存放进位数值      array[j] = sum % 10; // 将余数存入对应数组元素      }      if ( sc )      {      array[k] = sc;       k++;      }      }  cout <<n <<"! = ";  for (i = MAXSIZE - 1; i >=0; i--)    cout <<array[i];  cout <<endl;  return 0;} 

读书人网 >C++

热点推荐