<原创>关于求大数阶乘用数组方法实现
前两天看到论坛里有人发了一段代码用数组实现求大数阶乘
但发现还是有部分读者并不是非常明白
于是我把自己的代码加上注释 希望对那些还不是非常明白的读者有一点点帮助
首先请大家务必认真回忆一下自己是如何进行乘法运算的
#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;
}