对于求一个大数的阶乘的位数一般有两种方法:

第一种:

lg(N!)=[lg(N*(N-1)*(N-2)*......*3*2*1)]+1

=[lgN+lg(N-1)+lg(N-2)+......+lg3+lg2+lg1]+1

用C语言实现:

#include<stdio.h>
#include<math.h>
int main()
{  int n;  double sum=0;  scanf("%d",&n);  for(int i=1;i<=n;i++)  {  sum=sum+log10(i);  }  printf("%d\n",(int)sum+1);  return 0;
}  

第二种:

用Stirling公式计算n!结果的位数时,可以两边取对数,

得: log10(n!) = log10(2*PI*n)/2+n*log10(n/E); 
故n!的位数= log10(2*PI*n)/2+n*log10(n/E)+1(注意:当n=1时,算得的结果为0)

#include<stdio.h>
#include<math.h>
#define PI 3.141592654
#define E 2.71828182846
int main()
{  int n,sum=1;  scanf("%d",&n);  if(n>3)  sum=log10(2*PI*n)/2+n*log10(n/E)+1;  printf("%d\n",sum);  return 0;
}  

大数运算(6)——大数阶乘(求位数)相关推荐

  1. 大数运算(7)——大数阶乘(求阶乘)

    对于大数来说,一个数的阶乘是非常大的,同样,一个int类型的整数,他的阶乘就有可能会很大. 就拿50来说,他的阶乘位数是65位,就已经远远超过了long long int类型的最大值.这时候,我们要通 ...

  2. 大数运算(8)——大数幂运算

    大数幂运算的实现有了前面的大数乘法算法做铺垫,就是调用乘法函数,来循环去自乘,幂指数相应减1,直到幂指数变为0时结束. 下面是C语言代码实现: #include<stdio.h> #inc ...

  3. 大数运算(5)——大数除法(取模、取余)

    有关于大数除法的运算可以大致分为两种:一种是求商(取模),另一种是求余数(取余). 有两个大整数a和b,当a==b时,a/b==1,余数是0.(a!=0,b!=0) 当a>b时,a/b>= ...

  4. 大数运算(2)——大数加法

    /*大数加法的中心思想就是:模拟人工列竖式算加法的方法.先从最低位开始相加,判断是否进1,一直到最高位. 例如: 求12545642233+278545的和,该怎么算? 是这样的:      3  3 ...

  5. 大数运算(3)——大数减法

    大数的减法与大数加法的方法有相似之处的,都是模拟人工运算的,从最低位开始运算,一直到最高位. 其方法是: 首先,要判断减数和被减数哪一个位数长,减数位数长是正常减:被减数位数长,则被减数减减数,最后还 ...

  6. 大数运算(1)——大数储存

    int (16位) -32768-32767 (注:现在大多数的编译器的int型是32位的 也就是说跟long型的大小一样) long long或__int64(64位)     -922337203 ...

  7. 大数运算(4)——大数乘法

    首先说一下乘法计算的算法:同样是模拟人工计算时的方法. 从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果之后,用第二位相乘,记录结果并且左移一位,以此类推,直到计算完最后 ...

  8. Java实现大数运算

    一.大数运算介绍 大数运算,顾名思义,就是很大的数值的数进行一系列的运算.它是指由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数 ...

  9. 杭电oj HDOJ 1018 Big Number(斯特林公式求大数阶乘的位数)

    杭电oj HDOJ 1018 Big Number 题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1018 Problem Description In ...

最新文章

  1. LINUX的20练习题
  2. 用户行为分析笔记(一):概述
  3. ABAP 对字符串公式进行计算
  4. 计算机旁边快速访问没有桌面图标了怎么办,桌面找不到我的电脑(计算机)图标的解决办法-win10桌面显示我的电脑...
  5. Python: ImportRequestsError: No module named 'requests'解决方法
  6. 自己动手写操作系统(三)
  7. 光猫修改html灰色选项,电信光猫怎么设置(修改)wifi密码?
  8. html 图片触碰有放大效果,CSS3 鼠标滑过图片突出放大效果
  9. 那智机器人工具坐标设置方法
  10. 看板记录工具wekan
  11. 关于robots协议
  12. git push :unable to write sha1 filename ./bojects/xxxx:权限不够
  13. 来看一位淘宝卖家是如何精确的运作微信营销的
  14. vue组件封装: vue-popper+FloatManager
  15. php的set 方法调用,PHP中 对象自动调用的方法:set()、get()、tostring()
  16. win10下JDK的安装和配置,eclipse的下载安装
  17. python-web开发[15]之初识Django
  18. git 拉取所有远程分支
  19. 关于QQ和360打架的观点——转载
  20. 电影票小程序插件 电影票CPS插件 电影票微信小程序插件

热门文章

  1. 剑指offer-99.调整数组顺序使奇数位于偶数前面
  2. 判断字符串NSString是否是整形或者浮点型
  3. SOCKADDR_IN
  4. JAVA Io 缓冲输入输出流
  5. 出现“adb不是内部或外部命令,也不是可运行的程序或批量文件。”
  6. Golang 库学习笔记 Gin(二)
  7. 6678EVM调试K1_STK_v1.1例程中GE_test的时候报错:DDR3 leveling has failed, STATUS = 0x40000064的解决办法
  8. 【算法】一个简单的随机森林(RF)原理
  9. [云炬创业基础笔记]第五章创业机会评估测试11
  10. [我的1024开源程序]60元写的宠物网页和音乐网页