给你个通用的。运行后输入1000。

#define M 20000 /* 最大结果位数,DOS能访问的内存有限,最好不要超过 30000 位*/

#define N (M+5)

main()

{

int Num;

register int i,j,k,flag;

register unsigned int n,m,pc;

unsigned char str_n[5],result_0[N],result_1[N];

void fun_print_result(char *result,int flag);

int fun_mul(char *a,char *b,char *c,int flag);

printf("输入计算其阶乘的数:Num = ");

scanf("%d",&Num);

if(Num >= 100)

{

printf("\n正在进行阶乘运算. . .\n");

printf("已完成 00000 的阶乘,请等待. . .");

}

for (j=0;j

{

result_1[j] = 0; result_0[j] = 0;

}

result_1[N-1] = 1;

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

{

str_n[i] = 0;

}

n = 1;

pc = 0; flag = N-1;

while (n <= Num)

{

m = n;

k = 4;

while(m > 0)

{

str_n[k] = m%10; m /= 10; k--;

}

if (pc%2 == 0)

{

if(fun_mul (str_n,result_1,result_0,flag) != 1)

{

printf("\n\n结果溢出!当前所设置的最大结果为 %d 位 已完成 %d 的阶乘",M,pc);

exit(0);

}

}

else

{

if(fun_mul (str_n,result_0,result_1,flag) != 1)

{

printf("\n\n结果溢出!当前所设置的最大结果为 %d 位 已完成 %d 的阶乘",M,pc);

exit(0);

}

}

flag = flag-(4-k); /* flag 标记相乘后“可能的”第一个有效数字的标号 */

if(pc%2 == 0) /* 再处理一次使 flag 正好标记第一个有效数字的标号 */

{

if(result_0[flag] == 0) flag++;

}

else

{

if(result_1[flag] == 0) flag++;

}

n++; pc++;

if((pc)%25 == 0 && Num >= 100 && pc >= 100)

{

printf("\r已完成 %5d",pc);

}

}

if(Num >= 100) printf("\n");

if ((pc-1)%2 == 0)

{

fun_print_result (result_0,flag);

}

else

{

fun_print_result (result_1,flag);

}

}

int fun_mul(char *a,char *b,char *c,int flag) /* 相乘函数 */

{

register int i,j;

for(j=flag;j

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

{

if(a)

{

for (j=N-1;j>=flag;j--)

{

if(b[j])

{

c[i+j-4] += a[i]*b[j];

}

if(c[i+j-4] > 9)

{

c[i+j-5] += c[i+j-4]/10; c[i+j-4] %= 10;

}

}

}

}

if(flag < 10)

{

if (c[0] || c[1] || c[2] || c[3] || c[4]) /*** 结果溢出判断 ***/

{

return 0;

}

}

return 1;

}

void fun_print_result(char *result,int flag) /* 输出结果函数 */

{

int p;

printf("\n本次计算结果共有 %d 位,如下:\n\n",N-flag);

for(p=flag;p

{

printf("%d",result[p]);

if((p+1-flag)%(21*80) == 0)

{

printf("\n计算结果太长,请按任一键看下一屏,Esc 退出");

if(getch() == 27)

{

clrscr(); exit(0);

}

clrscr();

}

}

printf("%d",result[N-1]);

printf("\n\n[OK]");

}

算出来1000的阶乘为:

本次计算结果共有 2568 位,如下:

402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901

计算结果太长,请按任一键看下一屏,Esc 退出886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

[OK]

求1000的阶乘c语言编程,用C语言编写程序,求出1000的阶乘?相关推荐

  1. c语言---编写程序找出1000以内的完数

    所谓完数:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如:6的因子为1,2,3,而6=1+2+3,因此6是"完数".编程序找出1000以内的所有完数 ...

  2. c语言 do while 素数,1. 编写程序,求30以内的所有素数之和.用do while做

    用JAVA编写一个程序,求1000以内所有偶数的和以及奇数的和,并将偶数和以及奇数和输出到屏幕上. publicclassTest{publicvoiddisplay(){intsum=0;for(i ...

  3. 1到5阶乘c语言编程,用C语言写出1的阶乘到5的阶乘的和 – 手机爱问

    2018-04-25 用C语言编写程序,求出1000的阶乘.(利用数组) 给你个通用的.运行后输入1000.#define M 20000 /* 最大结果位数,DOS能访问的内存有限,最好不要超过 3 ...

  4. c语言求三门课总成绩,C语言编程,求高手 编写程序求某班20位学生三门课(英语,数学,语文)总成绩,并按照总成绩从大到小...

    C语言编程,求高手 编写程序求某班20位学生三门课(英语,数学,语文)总成绩,并按照总成绩从大到小 关注:212  答案:3  mip版 解决时间 2021-01-17 10:35 提问者夜落花台 2 ...

  5. C语言编程>第九周 ④ 编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(y)-y=0的一个实根。yn+1=cos(yn)

    例题:编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程cos(y)-y=0的一个实根. yn+1=cos(yn) 迭代步骤如下: (1)取y1初值为0.0. (2)y0=y1,把y1的值赋 ...

  6. c语言中求匀加速直线速度,速求C语言编程题 c语言编程速度求

    导航:网站首页 > 速求C语言编程题 c语言编程速度求 速求C语言编程题 c语言编程速度求 相关问题: 匿名网友: #include //计算行元素和 void CountRow(int a[] ...

  7. C++中如何读取一个数的位数_C语言编写程序求水仙花数

    C语言编写程序求水仙花数 水仙花数是一个数学问题,其实质是一个三位数,个位数的立方加十位数的立方加百位数的立方之和等于这个三位数本身.例如153=1*1*1+5*5*5+3*3*3,即153=1+12 ...

  8. 嵌入式培训c语言编程,嵌入式C语言学习秘诀

    嵌入式C语言学习秘诀 大家都知道C语言是整个嵌入式开发学习中一门重要的语言,所以学好C语言也是嵌入式开发学习中重要环节.到底如何学习C语言?C语言学习的秘诀是什么?今天本为就为大家揭开这个谜底.学习C ...

  9. 编写程序求n!--C语言中数组的使用

    注:部分内容摘自<数据结构>,黄国瑜,叶乃菁编著,清华大学出版社. 需求:编写程序求n!. 分析:数字相乘可以分解为各个阶位相乘,比如百位数A*B可分解为A100*B+A10*B+A1*B ...

  10. 7-100 简单求阶乘问题 (10 分)本题要求编写程序,计算N的阶乘。输入格式:输入在一行中给出一个不超过12的正整数N。输出格式:在一行中输出阶乘的值。输入样例:4结尾无空行

    7-100 简单求阶乘问题 (10 分) 本题要求编写程序,计算N的阶乘. 输入格式: 输入在一行中给出一个不超过12的正整数N. 输出格式: 在一行中输出阶乘的值. 样例">输入样例 ...

最新文章

  1. 理解Android系统的进程间通信原理(二)----RPC机制
  2. 清理svn信息_推荐候选人有奖啦~11.26最新招聘信息看这里!
  3. 【转】:Andriod开发环境搭建 (1)
  4. swift_034(Swift 动态库/静态库区别)
  5. 会导致所有者权益减少的项目是_处置固定资产而发生的净损失为什么会导致所有者权益减少...
  6. 洛谷 3953 NOIP2017提高组Day1 T3 逛公园
  7. 五、pink老师的学习笔记——CSS精灵技术(sprite)
  8. java的jstl的标签库_java_jstl 标签库
  9. 我国快递年业务量首次突破千亿件大关
  10. Spring Boot整合Swagger3注解@ApiImplicitParam的allowMultiple属性
  11. 判别性的低秩字典学习代码matlab,基于分类的判别性字典学习的稀疏编码算法研究...
  12. 【软件体系结构】软件体系结构概述
  13. c语言程序中TMOD,keil 中用c 语言写的代码 error C231: 'TMOD': redefinition
  14. cad里面f命令用不了_cad命令_CAD命令中 F 命令是什么作用?
  15. linux挂载iso5后如何安装,CentOS系统怎样挂载光盘镜像ISO文件
  16. 1.9w粉丝带动近100w播放量,推广黑马不止一位
  17. 从JPG和JPEG图片获取压缩比详细教程
  18. 购买服务器的个人经验
  19. 希沃白板如何在公式里面输入绝对值符号
  20. 石油大学网考 在线作业、在线考试 自动答题辅助工具

热门文章

  1. TensorFlow2.0:自定义层与自定义网络
  2. @Autowired的作用
  3. JavaScript学习之Object(下)this
  4. jira服务断电导致索引文件损坏问题解决
  5. 第二:Postman做各种类型的http接口测试
  6. 【十八】文件译文:graph.js.fmkr (测试报告模版配置文件)
  7. MySQL数据库基本操作语法
  8. excel 单元格名称 java_Java 创建、编辑、删除Excel命名区域
  9. 系统理解Win32 API和MFC
  10. 删除还原点 oracle,oracle 还原点(restore point)