c++程序的阶乘问题

来源:百度知道 编辑:UC知道 时间:2024/07/02 14:53:40
#include "stdio.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
int carry,n,j;
int a[2000];
int digit=1;
int temp,i;
cout<<"please enter n:"<<endl;
cin>>n;
a[0]=1;
for(i=2; i<=n; i++)
{
for(carry=0,j=1; j<=digit; ++j)
{
temp=a[j-1]*i+carry;
a[j-1]=temp%10;
carry=temp/10;
}
while(carry)
{
//digit++;
a[++digit-1]=carry%10;
carry/=10;
}
}
cout<<"the result is:"<<endl;
for(int k=digit; k>=1; --k)
cout<<a[k-1];
cout<<endl;
return 0;
}
这个算是一个高精度算法吧?就算N很大时的阶乘。
我不是很明白他的执行过程,算了好几遍都算不通,请大家帮个忙,告诉我一下执行的过程,例如当输入N=5的时候 他每次计算各变量的值是多少?
我笔算到5的时候他a[0

#include "stdio.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
int carry,n,j; //carry低位超过10向高一位进的数,n阶层数,j数据位数
int a[2000]; //表示数据值的数组
int digit=1; //数据总位数
int temp,i; //temp临时变量,i当前阶层的乘数
cout<<"please enter n:"<<endl;
cin>>n;
a[0]=1;
for(i=2; i<=n; i++)
{
for(carry=0,j=1; j<=digit; ++j) //向数组中的每一位乘i
{
temp=a[j-1]*i+carry; //temp保存当前乘的结果加上低位进数
a[j-1]=temp%10; //让数组保存当前位的值(0 ~ 9)
carry=temp/10; //需要向高位进carry
}
while(carry) //当最高位需要进位时,carry保存需要向更高位进的数
{
//digit++;
a[++digit-1]=carry%10; //总数据位数加1,新最高位保存数据
carry/=10; //新最高位需要向新更高位进的数
}
}
cout<<"the result is:"<<endl;
for(int k=digit; k>=1; --k)
cout<<a[k-1];
cout<<endl;
return 0;
}

把(长度为两千的)数组表现成一个十进制的数字,从低到高。
譬如结果等于539286,那么a[0] = 6,a[1]=8