c语言高精度算法阶乘_任意位数的高精度阶乘算法 C语言版
文章作者:姜南(Slyar)文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。
今天就研究这个”任意位数的高精度阶乘算法”了,通过和大三的一个学长讨论,最终写出了这个还比较满意的算法:
1、利用C语言的动态数组来达到任意位数,但是首先需要知道数组的长度,也就是N!有多少位。
2、求出N!的结果有多少位,这个公式我就不证明了,是log10(1)+log10(2)+···+log10(n) 取整加1。
3、使用万进制来进位,减少空间的利用,提高运算速度。
4、高精度阶乘算法。
5、因为使用万进制,所以输出各位的时候需要补0。
6、最后发现如果N<1000的话结果的首位会出现0,因此单独输出第一位保证首位没有0。
代码如下:
#include #include #include /* 求N!的位数公式 log10(1)+log10(2)+···+log10(n) 取整加1 */
int wei(int n)
{
int i;
double sum=0;
for(i=1;i<=n;i++) sum+=log10((double)i);
/* 以万为进制,一位可以表示4个数,减少存储空间 */
return (int)((sum+1)/4+1);
}
/* 高精度阶乘核心 */
int main()
{
int i,j,n,jinwei,weishu=1,temp;
unsigned int *x;
scanf("%d",&n);
/* 依据阶乘位数申请动态数组 */
x=(unsigned int*) malloc(wei(n)*sizeof(int));
x[0]=1;
for(i=2;i<=n;i++)
{
jinwei=0;
for(j=1;j<=weishu;j++)
{
temp=x[j-1]*i+jinwei;
if (temp>=1)
{
/* 以万为进制,提高运算速度 */
x[j-1]=temp%10000;
jinwei=temp/10000;
}
}
while(jinwei)
{
weishu++;
x[weishu-1]=jinwei%10000;
jinwei/=10000;
}
}
/* 先输出第一个数,防止首位出现0 */
printf("%d",x[weishu-1]);
/* 输出其余的数,因为万进制,需要补0 */
for(j=weishu-2;j>=0;j--) printf("%04d",x[j]);
/* 释放申请的内存 */
free(x);
system("pause");
return 0;
}
c语言高精度算法阶乘_任意位数的高精度阶乘算法 C语言版相关推荐
- 连通域最小外接矩形算法原理_基于分割的文本检测算法之PSENet/PAN/DBNet
1. 文本检测难点 文本内包含文本,艺术字体,任意方向 ,曲线文字 ,多语言,其他环境因素等是文本检测中的难点 2. 分割 问题1: 语义分割模型是对pixel进行分类,所以理论上讲,可以检测不规则的 ...
- 机器学习算法 拟合曲线_制定学习曲线以检测机器学习算法中的错误
机器学习算法 拟合曲线 机器学习 (Machine Learning) The learning curve is very useful to determine how to improve th ...
- 三维图形几何变换算法实验_基于深度学习的三维重建算法综述
点击上方"计算机视觉life",选择"星标" 快速获得最新干货 00 前言 目前,三维重建技术已在游戏.电影.测绘.定位.导航.自动驾驶.VR/AR.工业制造以 ...
- 万能乘法速算法大全_小学数学加减乘除【速算法】都在这里! 寒假让孩子练一练...
★需要电子版资料可直接拉至文末查看领取方式哈! 小果老师说: 很多小朋友的寒假生活已经开启啦!寒假的确可以好好玩一玩,但某种程度上该学习还是的学习一些的! 因此 ,今天小果老师要给大家分享的内容是数学 ...
- otsu阈值分割算法原理_大津二值化算法OTSU的理解
otsu 大津算法介绍: OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法. 利用阈值将原图像分成前景,背景两个图象. 前景:用n1,csum,m1来表示在当前阈值下的 ...
- 3算法全称_全网最通俗的KMP算法图解
导语 本篇内容研究字符串匹配问题,首先介绍字符串匹配问题,引出Brute-Force算法及其优化方法,最后深入详解KMP算法.文章结构如下(全文阅读需要30分钟左右): 字符串匹配问题 1字符串匹配问 ...
- fp算法例题_机器学习(九)—FP-growth算法
本来老师是想让我学Hadoop的,也装了Ubuntu,配置了Hadoop,一时间却不知从何学起,加之自己还是想先看点自己喜欢的算法,学习Hadoop也就暂且搁置了,不过还是想问一下园子里的朋友有什么学 ...
- python路径规划算法可视化_路径规划问题:DIJKSTRA算法 以及Python实现
一. DJKSTRA算法概述 我们可以将地图抽象为Graph的数据结构,然后利用Graph的广度优先遍历算法(Breadth-First Search, BFS)解决无权重的High-Level的地图 ...
- 聚类算法 距离矩阵_论文阅读9——AP聚类算法
Affinity Learning for Mixed Data Clustering 论文提出了基于混合对数据进行聚类的学习框架,具体研究内容包括:1)如何处理具有混合类型属性的数据.2)如何学习数 ...
最新文章
- javascript——三元操作符
- IDEA无法在service层用注解方式注入mapper
- 比特币分叉两年记:聊聊当年为什么要分叉?
- 给VMWare虚拟机做快照--保存你的劳动成果
- 【自动驾驶】11.百度Apollo对ROS的优化
- 丰田汽车受战斗操作模式启发影响推人机合作子驾车
- python k线合成_手把手教你写一个Python版的K线合成函数
- 100个经典的C语言算法
- 信用算力基于 RocketMQ 实现金融级数据服务的实践
- Oracle备份如何到异机还原
- 自学python需要什么_自学Python编程有什么要求
- WebStorm 常用快捷键大全 - 归纳总结篇
- socket网络字节序相关概念
- ctab法提取dna流程图_每周实验新品:创新核酸提取技术、离心管自动打标设备...
- 真的神了~无意中发现1500道的2021LeetCode算法刷题pdf笔记
- AT24C32、AT24C64、AT24C128、AT24C256、AT24C512系列EEPROM芯片单片机读写驱动程序
- SSD的TRIM原理及实践
- 计算机如何取消自动关机,电脑怎么设置自动关机及取消自动关机
- 电脑连接宽带,给手机开热点
- ligerui demo php,ligerui grid行编辑示例