文章作者:姜南(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语言版相关推荐

  1. 连通域最小外接矩形算法原理_基于分割的文本检测算法之PSENet/PAN/DBNet

    1. 文本检测难点 文本内包含文本,艺术字体,任意方向 ,曲线文字 ,多语言,其他环境因素等是文本检测中的难点 2. 分割 问题1: 语义分割模型是对pixel进行分类,所以理论上讲,可以检测不规则的 ...

  2. 机器学习算法 拟合曲线_制定学习曲线以检测机器学习算法中的错误

    机器学习算法 拟合曲线 机器学习 (Machine Learning) The learning curve is very useful to determine how to improve th ...

  3. 三维图形几何变换算法实验_基于深度学习的三维重建算法综述

    点击上方"计算机视觉life",选择"星标" 快速获得最新干货 00 前言 目前,三维重建技术已在游戏.电影.测绘.定位.导航.自动驾驶.VR/AR.工业制造以 ...

  4. 万能乘法速算法大全_小学数学加减乘除【速算法】都在这里! 寒假让孩子练一练...

    ★需要电子版资料可直接拉至文末查看领取方式哈! 小果老师说: 很多小朋友的寒假生活已经开启啦!寒假的确可以好好玩一玩,但某种程度上该学习还是的学习一些的! 因此 ,今天小果老师要给大家分享的内容是数学 ...

  5. otsu阈值分割算法原理_大津二值化算法OTSU的理解

    otsu 大津算法介绍: OTSU算法是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法. 利用阈值将原图像分成前景,背景两个图象. 前景:用n1,csum,m1来表示在当前阈值下的 ...

  6. 3算法全称_全网最通俗的KMP算法图解

    导语 本篇内容研究字符串匹配问题,首先介绍字符串匹配问题,引出Brute-Force算法及其优化方法,最后深入详解KMP算法.文章结构如下(全文阅读需要30分钟左右): 字符串匹配问题 1字符串匹配问 ...

  7. fp算法例题_机器学习(九)—FP-growth算法

    本来老师是想让我学Hadoop的,也装了Ubuntu,配置了Hadoop,一时间却不知从何学起,加之自己还是想先看点自己喜欢的算法,学习Hadoop也就暂且搁置了,不过还是想问一下园子里的朋友有什么学 ...

  8. python路径规划算法可视化_路径规划问题:DIJKSTRA算法 以及Python实现

    一. DJKSTRA算法概述 我们可以将地图抽象为Graph的数据结构,然后利用Graph的广度优先遍历算法(Breadth-First Search, BFS)解决无权重的High-Level的地图 ...

  9. 聚类算法 距离矩阵_论文阅读9——AP聚类算法

    Affinity Learning for Mixed Data Clustering 论文提出了基于混合对数据进行聚类的学习框架,具体研究内容包括:1)如何处理具有混合类型属性的数据.2)如何学习数 ...

最新文章

  1. javascript——三元操作符
  2. IDEA无法在service层用注解方式注入mapper
  3. 比特币分叉两年记:聊聊当年为什么要分叉?
  4. 给VMWare虚拟机做快照--保存你的劳动成果
  5. 【自动驾驶】11.百度Apollo对ROS的优化
  6. 丰田汽车受战斗操作模式启发影响推人机合作子驾车
  7. python k线合成_手把手教你写一个Python版的K线合成函数
  8. 100个经典的C语言算法
  9. 信用算力基于 RocketMQ 实现金融级数据服务的实践
  10. Oracle备份如何到异机还原
  11. 自学python需要什么_自学Python编程有什么要求
  12. WebStorm 常用快捷键大全 - 归纳总结篇
  13. socket网络字节序相关概念
  14. ctab法提取dna流程图_每周实验新品:创新核酸提取技术、离心管自动打标设备...
  15. 真的神了~无意中发现1500道的2021LeetCode算法刷题pdf笔记
  16. AT24C32、AT24C64、AT24C128、AT24C256、AT24C512系列EEPROM芯片单片机读写驱动程序
  17. SSD的TRIM原理及实践
  18. 计算机如何取消自动关机,电脑怎么设置自动关机及取消自动关机
  19. 电脑连接宽带,给手机开热点
  20. ligerui demo php,ligerui grid行编辑示例

热门文章

  1. 向吃鸡外挂站开炮(二)——yzddMr6
  2. 华为matepad切换电脑模式_华为MatePad Pro电脑模式体验 全新HUAWEI M-Pencil助力高效办公...
  3. PPT绘图相关,快捷键,美观度
  4. Pr 入门教程:如何创建电影的结尾片名?
  5. 英特尔oneAPI创新大使招募
  6. 直播系统后台管理了解
  7. MySQL——子查询
  8. 什么方法可以快速将文字转语音
  9. html 轮播切图,JS轮播图的实现方法
  10. Swoole在Tp5.1中的使用