设为首页 加入收藏

TOP

大整数阶乘的算法思路
2014-11-19 10:00:36 】 浏览:5327
Tags:整数 算法 思路

  听说中科院软件所09年复试的笔试题就是这个,打算自己写写。


  这里的大整数指大于500以上的整数,当然更大也可以。由于整数阶乘递增的很快,远大于指数式递增,对于小整数,比如20,30左右,可以直接使用比如递归的方式进行,这很基本。


  但是当整数较大时,阶乘的结果很大,远非一个int或者long就能存的下的,比如1000的阶乘结果有上千位。


  所以大整数阶乘设计的关键点就是存储大整数,当选择了存储大整数,那么整数的乘法运算也不能再依靠*了,所以还要重新设计大整数的惩罚运算。


  上面是我的设计思路。网上找过相关的文章,有高手以4行代码完成了该算法,确实佩服!当然这涉及了算法的优化,不管那么多了,这里要的就是以尽量清晰地思路快速设计该算法,这是使用了STL标准库的容器。


  下面是我的算法代码,直接贴这里了,注意看相关的注释:


  #include


  #include


  using namespace std;


  // 传入整数:int,和整数-1的阶乘结果,进行相乘的结果


  // 结构依然存储到容器中


  void Calc(int num,vector &calcresult)


  {


  vector tempnum;


  vector rest;


  // 将传入的int拆分之后保存到容器中


  do


  {


  tempnum.push_back(num % 10);


  num = num / 10;


  } while (num);


  // 将分拆之后的num进行乘法计算


  unsigned int i = 0,j = 0;


  for(i = 0;i < tempnum.size();++i)


  {


  int carry = 0;// 存储每位计算时来自低位的进位


  for(j = 0;j < calcresult.size();++j)


  {


  int bit1 = 0,bit2 = 0,res = 0;


  bit1 = calcresult[j];


  bit2 = tempnum[i];


  res = bit1 * bit2;


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇大整数阶乘问题的递推算法 下一篇VC下几种转换为UNICODE字符串的方..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目