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

6a89eaa072c4502901eb3aa6cedea310.png

2018-04-25

用C语言编写程序,求出1000的阶乘.(利用数组)

给你个通用的。运行后输入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);...全部

给你个通用的。运行后输入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("

正在进行阶乘运算。

。 。

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

"); } for (j=0;j 0) { str_n[k] = m; m /= 10; k--; } if (pc%2 == 0) { if(fun_mul (str_n,result_1,result_0,flag) != 1) { printf("

结果溢出!当前所设置的最大结果为 %d 位 已完成 %d 的阶乘",M,pc); exit(0); } } else { if(fun_mul (str_n,result_0,result_1,flag) != 1) { printf("

结果溢出!当前所设置的最大结果为 %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)% == 0 && Num >= 100 && pc >= 100) { printf("已完成 ]",pc); } } if(Num >= 100) printf("

"); 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=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 { 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("

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

",N-flag); for(p=flag;p { printf("%d",result[p]); if((p 1-flag)%(21*80) == 0) { printf("

计算结果太长,请按任一键看下一屏,Esc 退出"); if(getch() == 27) { clrscr(); exit(0); } clrscr(); } } printf("%d",result[N-1]); printf("

[OK]");}算出来1000的阶乘为:本次计算结果共有 2568 位,如下:402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901计算结果太长,请按任一键看下一屏,Esc 退出886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000[OK]。收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值