大数运算(6)——大数阶乘(求位数)
对于求一个大数的阶乘的位数一般有两种方法:
第一种:
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)——大数阶乘(求位数)相关推荐
- 大数运算(7)——大数阶乘(求阶乘)
对于大数来说,一个数的阶乘是非常大的,同样,一个int类型的整数,他的阶乘就有可能会很大. 就拿50来说,他的阶乘位数是65位,就已经远远超过了long long int类型的最大值.这时候,我们要通 ...
- 大数运算(8)——大数幂运算
大数幂运算的实现有了前面的大数乘法算法做铺垫,就是调用乘法函数,来循环去自乘,幂指数相应减1,直到幂指数变为0时结束. 下面是C语言代码实现: #include<stdio.h> #inc ...
- 大数运算(5)——大数除法(取模、取余)
有关于大数除法的运算可以大致分为两种:一种是求商(取模),另一种是求余数(取余). 有两个大整数a和b,当a==b时,a/b==1,余数是0.(a!=0,b!=0) 当a>b时,a/b>= ...
- 大数运算(2)——大数加法
/*大数加法的中心思想就是:模拟人工列竖式算加法的方法.先从最低位开始相加,判断是否进1,一直到最高位. 例如: 求12545642233+278545的和,该怎么算? 是这样的: 3 3 ...
- 大数运算(3)——大数减法
大数的减法与大数加法的方法有相似之处的,都是模拟人工运算的,从最低位开始运算,一直到最高位. 其方法是: 首先,要判断减数和被减数哪一个位数长,减数位数长是正常减:被减数位数长,则被减数减减数,最后还 ...
- 大数运算(1)——大数储存
int (16位) -32768-32767 (注:现在大多数的编译器的int型是32位的 也就是说跟long型的大小一样) long long或__int64(64位) -922337203 ...
- 大数运算(4)——大数乘法
首先说一下乘法计算的算法:同样是模拟人工计算时的方法. 从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果之后,用第二位相乘,记录结果并且左移一位,以此类推,直到计算完最后 ...
- Java实现大数运算
一.大数运算介绍 大数运算,顾名思义,就是很大的数值的数进行一系列的运算.它是指由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数 ...
- 杭电oj HDOJ 1018 Big Number(斯特林公式求大数阶乘的位数)
杭电oj HDOJ 1018 Big Number 题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1018 Problem Description In ...
最新文章
- LINUX的20练习题
- 用户行为分析笔记(一):概述
- ABAP 对字符串公式进行计算
- 计算机旁边快速访问没有桌面图标了怎么办,桌面找不到我的电脑(计算机)图标的解决办法-win10桌面显示我的电脑...
- Python: ImportRequestsError: No module named 'requests'解决方法
- 自己动手写操作系统(三)
- 光猫修改html灰色选项,电信光猫怎么设置(修改)wifi密码?
- html 图片触碰有放大效果,CSS3 鼠标滑过图片突出放大效果
- 那智机器人工具坐标设置方法
- 看板记录工具wekan
- 关于robots协议
- git push :unable to write sha1 filename ./bojects/xxxx:权限不够
- 来看一位淘宝卖家是如何精确的运作微信营销的
- vue组件封装: vue-popper+FloatManager
- php的set 方法调用,PHP中 对象自动调用的方法:set()、get()、tostring()
- win10下JDK的安装和配置,eclipse的下载安装
- python-web开发[15]之初识Django
- git 拉取所有远程分支
- 关于QQ和360打架的观点——转载
- 电影票小程序插件 电影票CPS插件 电影票微信小程序插件
热门文章
- 剑指offer-99.调整数组顺序使奇数位于偶数前面
- 判断字符串NSString是否是整形或者浮点型
- SOCKADDR_IN
- JAVA Io 缓冲输入输出流
- 出现“adb不是内部或外部命令,也不是可运行的程序或批量文件。”
- Golang 库学习笔记 Gin(二)
- 6678EVM调试K1_STK_v1.1例程中GE_test的时候报错:DDR3 leveling has failed, STATUS = 0x40000064的解决办法
- 【算法】一个简单的随机森林(RF)原理
- [云炬创业基础笔记]第五章创业机会评估测试11
- [我的1024开源程序]60元写的宠物网页和音乐网页