#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;
}
#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;
}
/
通常用于一般的递归来求阶乘,只能相对于很小的整数,当对于一个稍大的点的数时,整数的存放问题就成了关键,前几天向老师请教了些进位的问题,C++老师给我回了E—mail.同时发过来了上面的程序,感觉这个程序有它的经典之处,它重点写出了对于一个很大的阶乘整数应该怎么样进行存放。
这类方法值得学习和探究//。