由于大数阶乘的位数超出了int的表示范围,我们只能用一个数组来放置它,那么首先确定结果数组的大小,这个可以根据阶乘位数的计算公式来计算,这里有个关键点,在定义数组的时候可以先给出一个指针,在原则上指针和数组是一致的,等确定了大小后就可以利用malloc()来申请一块内存来,这个内存就是我们最后的结果数组,如果直接定义数组就会遇到必须确定数组大小的麻烦,得到了数组后然后我们对初始化,注意必须个位赋值为一,这时候我们进入了关键的迭代,进入了for()大循环,在这里结果数组就是一个寄存器,每循环一次,我们都把结果放在a[j]里面,此时a[j]里面很可能已经出现大于9的数字,这就需要向a[j+1]进位,此时我们设计一个子函数来实现这个功能,dgCal()函数,设置了一个进位标志位cy, 传入此函数的是一个结果数组,和最高位非零的下标,首先遍历整个数组的非零部分,从个位开始,进位标志位赋初值为0,进入循环后,首先判读进位标志位是否需要进位,如果有值,肯定是从下面传上来的,加到自己的数字上面,然后开始判断自己的数字是属于下面三种那种情况,根据情况判断如何设置进位位。遍历完后,进入主函数进行下一轮的循环与(i+1)相乘。

这个算法的亮点就是结果数组的定义和,进位子函数的设计很好。

#include "math.h"

#include "stdio.h"

#include "stdlib.h"

void jinwei(int a[],int pos)

{

int i,cy=0;      //进位值  ,cy装载循环一次数组中需要进位的值

for(i=0;i<=pos;i++)//从0-pos逐个检查是否要进位

{

a[i]+=cy;

if(a[i]<=9)//不需进位

{

cy=0;//进位制为0

}

else if(a[i]>9&&i{

cy=a[i]/10;//进位值

a[i]=a[i]%10;

}

else if(a[i]>9&&i>=pos)//需进位,已达到最高位

{

while(a[i]>9)//循环向前进位

{

cy=a[i]/10;

a[i]=a[i]%10;

i++;

a[i]=cy;

}

}

}

}

int main( )

{

int i,j;

int *a;//结果数组

int num=200;//要求的阶乘数

int pos=0;//最高位下标

int digit=0;//阶乘的位数

double sum=0;

for(i=1;i<=num;i++)

{

sum += log10((double)i);//计算阶乘的位数

}

digit=(int)sum+1;//阶乘的位数

if(!(a=(int *)malloc( (digit+1) * sizeof(int) )))//分配内存

{

printf("内存分配失败!\n");

return 0;

}

for(i=0;i<=digit;i++)

{

a[i]=0;//初始化

}

a[0]=1;//个位为1

for(i=2;i<=num;i++)//2-num逐个与原来的结果相乘

{

for(j=digit;j>=0;j--)//查找最高位的下标

{

if(a[j]!=0)

{

pos=j;

break;

}

}

for(j=0;j<=pos;j++)

{

a[j]*=i;//逐个相乘

}

jinwei(a,pos);//乘完一轮后进位处理

}

for(j=digit;j>=0;j--)//查找最高位的下标

{

if(a[j]!=0)

{

pos=j;

break;

}

}

printf("200的阶乘:\n");

printf("位数:%d\n",pos+1);

for(i=pos;i>=0;i--)

{

printf("%d",a[i]);//打印结果

}

printf("\n");

return 0;

}

c语言求大数阶乘思路,大数阶乘的c语言算法心得相关推荐

  1. C语言求网格的最大不重复路径数的算法(附完整源码)

    C语言求网格的最大不重复路径数的算法 C语言求网格的最大不重复路径数的算法完整源码(定义,实现,main函数测试) C语言求网格的最大不重复路径数的算法完整源码(定义,实现,main函数测试) #in ...

  2. C语言——求1到10的阶乘之和

    求1到10的阶乘之和,代码如下: #include<stdio.h> int main() {double a,b=1,sum=0;for(a=1;a<=10;a++){b = a* ...

  3. c语言求偶数的积,《动物的多*语言》阅读理解及*

    第1篇:<动物的多*语言>阅读理解及* [原文] 动物的多*语言 壬艳坤 1动物也有自已的语言.鸡鸣*吠,虎a猿b,莺c燕d,蝉e虫f--都是动物的语言.这种语言类繁多.千差万别.据说鸟类 ...

  4. C语言求1到20的阶乘之和

    #include<stdio.h>int main() {int i, j;long long sum = 0, jieCheng;for (i = 1; i <= 20; i++) ...

  5. c语言求一个数的位数不用循环_LeetCode基础算法题第181篇:将数字减少为零的步骤数...

    技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完.目前我选择C语言,Python和Java作为实现语言,因为这三种语 ...

  6. c语言求abc大小时要怎么输入,C语言 有3个数a,b,c,要求按大小顺序把它们输出。,急!!!!!有三个数abc,要求按大小顺序输出. 请问用C语...

    导航:网站首页 > C语言 有3个数a,b,c,要求按大小顺序把它们输出.,急!!!!!有三个数abc,要求按大小顺序输出. 请问用C语 C语言 有3个数a,b,c,要求按大小顺序把它们输出., ...

  7. c语言求三个数最值非函数,C语言编程:从键盘任意输入三个数,编写求其最大值、最小值的函数,用指针作函数参数实现。...

    www.shufadashi.com防采集. C语言编程:从键盘任意输入三个数,编写求其最大值.最小值的函数,用指针作函数参数实现.. #includevoid maxfunction(int*);v ...

  8. c语言求泡点温度,化工0801-0803班C语言课程设计任务书.doc

    C语言程序课程设计: 苯-甲苯精馏塔理论塔板数的计算 一. 设计任务书 1.设计条件 (1)原料:苯-甲苯混合溶液: (2)进料中苯摩尔百分率为: (3)采取泡点进料,q=1: (4)馏出液中苯含量: ...

  9. c语言求3个整数的平均数程序,c语言求余(c语言求任意三个数的平均值)

    C语言提供了一个取余数的运算符%,称之为"模"运算符.只有两个整数之间才可以进行模运算!a % b 表示 用b来整除a,商整数,得到余数.如:5%3 = 2 4%3 =13%3 . ...

最新文章

  1. 「彩票假说」要修正?王言治团队:神经网络要「中奖」,秘密在于学习率!|ICML 2021...
  2. python函数的作用是_Python函数一
  3. 安装高可用性虚拟机,livemigration系列之九
  4. php网址中mod=,php – Apache mod-rewrite htaccess – 带参数的动态url
  5. 网站推广专员浅析关键词筛选决定网站推广的排名与流量
  6. 地图下面的标尺是什么意思_房屋产权70年产权吧,下面的使用年限是什么意思?...
  7. 新的JDK 11文件方法isSameContent()
  8. 深度学习的实用层面 —— 1.12 梯度的数值逼近
  9. nsdictionary获取值_获得nsdictionary值
  10. 90后互联网打工人:为了买小两居,爸妈打零工帮我凑首付
  11. Relay log read failure解决办法
  12. 【NOI2011】 阿狸的打字机(AC自动机+树状数组)
  13. Win10电脑下载软件有绑定软件怎么删除
  14. Java String,看这篇就够了
  15. 利用监听器(Listener)实现用户访问记录
  16. Davinci Resolve Studio 17d5达芬奇调色软件专业版
  17. tcp发送窗口(滑动窗口)、拥塞窗口
  18. utools快速上手心得
  19. 市场调研—全球与中国手推式扫地机市场现状及未来发展趋势
  20. 科研数据统计绘图常用软件介绍【持续更新】

热门文章

  1. 「模型即服务AI」1分钟调用SOTA人脸检测,同时搭建时光相册小应用
  2. 今天搞一下 MultipartFile java后台接收图片参数,并转存到本地
  3. SSM+实验室门禁管理系统 毕业设计-附源码221252
  4. 道路交通安全相关企业
  5. 原始套接字实现UDP程序
  6. 人生的价值-名人名言
  7. socket客户端和服务器通信协议,51. Socket服务端和客户端使用TCP协议通讯
  8. 怎样用计算机计算节点导纳矩阵,节点导纳矩阵计算.doc
  9. android苹果音乐播放器,GitHub - macproz/HappyMusicPlayer: android音乐播放器
  10. 怎么解决系统内存占比过高【保姆级教学】