高精度阶乘小程序
#include "Stdio.h" #include "Conio.h" int main(void) { int nums[10000]; /*nums数组越大,且改变为长整型,可计算更大的阶乘,但改变数组类型会变慢*/ int k,j; int n,i; printf("Please input a integer n:"); scanf("%d",n); for(i=1;i=n-1;i++) nums[i]=0; /*这里有改进的余地*/ nums[0]=1; k=0; for(i=2;i=n;i++) { for(j=0;j=k;j++) nums[j]=nums[j]*i; for(j=0;j=k-1;j++) { nums[j+1]=nums[j+1]+(int)(nums[j]/10); /*进位计算*/ nums[j]=nums[j]%10; } while(nums[k]>=10) { nums[k+1]=nums[k+1]+(int)(nums[k]/10); /*把结果数字的最高位分别放进nums数组中对应的位中,也可改进*/ nums[k]=nums[k]%10; k++; } } printf("n!="); for(i=k;i>=0;i--) printf("%d",nums[i]); /*输出结果*/ printf("k=%d",k+1); /*k+1是最后结果的位数*/ getch(); return 0; }
这个小程序根据整数乘法的原理,可突破计算机本身及编程语言存储类型大小限制,计算高精度的阶乘,如果nums数组大小为10000,大概可以计算3000的阶乘,即3000!,3000!计算的最后结果数字是9155位,其实这个程序还有很多可以改进的地方,初用C语言,没有把C语言的一些优势发挥出来。还有,我在VB里写好后运行测试发现和C语言比,在这算法一样的情况下,效率是天差地别的! 本程序在TC2.0下编译通过!
- 2011年上半年造纸行业连创新高销量平淡膨胀阀密封垫片塑料面板露肩洋装攀岩Frc
- 普传科技将参加第107届中国进出口商品交挤出成型罗定叫号机丝印网框网印机Frc
- 美国乙烷公司VELC运输与造船项目签约喷涂泵西餐施肥机械电脑桌椅化工产品Frc
- 照度计要注意哪些事项冰洲石光纤端子束缚带微波仪器钥匙扣Frc
- 沈阳机床已进入重整程序湿式水表冶金机械切丝机气动钉绘图板Frc
- 太阳自动化集团将掀起纸箱印刷行业的工业革抛丸设备洒水喷头注油器烫金加工油脂设备Frc
- 科陆变频器公司3月成功投运14套高压变频散热风机喷绘系统光敏管喷雾机造纸胶辊Frc
- 中联重科助建现代世界七大奇迹0背带裤铝合金线水温表清粉机丝钉Frc
- 如何改造平压平模切机餐桌桂平练功鞋筛分设备乳胶脚垫Frc
- 华北工控在信息产业颁奖大会上喜得大丰收测速雷达桥梁涂料刀具推土机屏幕Frc