高精度阶乘小程序
#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下编译通过!
- 基于DSP的高精度伺服位置环设计方案(04-14)
- 定点DSP中高精度除法的实现方案(05-12)
- 基于DSP的16通道声发射同步数据采集电路设计 (08-28)
- 基于CAN总线的高精度温湿度监控系统(12-21)
- 现场总线严苛环境中的高精度测量利器(12-16)
- DS3231高精度时钟模块程序(12-01)