微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 高精度阶乘小程序

高精度阶乘小程序

时间:11-06 来源:互联网 点击:

#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下编译通过!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top