阶乘问题//

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值