注册 登录
编程论坛 C++教室

<原创>关于求大数阶乘用数组方法实现

ljfljf2006 发布于 2007-12-02 20:09, 1073 次点击
前两天看到论坛里有人发了一段代码
用数组实现求大数阶乘
但发现还是有部分读者并不是非常明白
于是我把自己的代码加上注释 希望对那些还不是非常明白的读者有一点点帮助


首先请大家务必认真回忆一下自己是如何进行乘法运算的

#include "stdafx.h"
#include <iostream>
#define N 2000
using namespace std;
int main(int argc, char* argv[])
{
 int n,i,j,digit=0,temp=0,a[N];           /*数组a[N]用来存储运算结果,每一个元素只存储一个数字,a[digit]表示当前最高位*/
 a[0]=1;
 cin>>n;                                  /*输入所求阶乘*/
 for(i=2;i<=n;i++)                     /*该循环控制所要乘的数*/
 {
  for(j=0;j<=digit;j++)               /*该循环控制数组a[N]的每一个元素分别和当前n相乘*/
  {
   temp=a[j]*i+temp;                 /*将上次运算后向前进位的数和当前元素进行乘法运算后的结果相加*/
   a[j]=temp%10;                      /*将结果的最后一位保存在当前元素位置*/
   temp=temp/10;                     /*最后一位保存后,将其丢弃*/
  }
  while(temp!=0)                      /*将最后剩下的最高几位依次保存,并通过digit来记录运算结果最高位*/
  {
   a[++digit]=temp%10;
   temp=temp/10;
  }
 }
 for(i=digit;i>=0;i--)                 /*输出结果*/
  cout<<a[i];
 cout<<endl;
 return 0;
}
0 回复
1