一个能容纳40位数的算法!
/*设计一个可以容纳40位数的求n!的程序*/
/*=================================================*/
/*程序名称:*/
/*程序目的:设计一个可以容纳40位数的求n!的程序 */
/*作者:kuo-Yu Huang */
/*=================================================*/
#include "stdio.h"
#include "conio.h"
void main(void)
{
int Data[40]; /*存储40位数的整数数组*/
int Digit; /*数据位数变量*/
int i,j,r,k; /*循环变量*/
int N; /*用户输入值*/
for (i=1;i<40+1;i++) /*将数组初值为零*/
Data=0;
Data[0]=1; /*设第零位数数组是1*/
Data[1]=1; /*设第一位数数组是1*/
Digit = 1; /*设数据位数是1*/
printf("Enter a number what you want to calculus : ");
scanf("%d",&N); /*读取用户欲求的值*/
if(N>34)
{
printf("The bit overload 40");
sleep(1);
return ;
}
for(i=1;i<N+1;i++)
{
for(j=1;j<Digit+1;j++)
Data[j]*=i; /*数组中内容的运算*/
for(j=1;j<Digit+1;j++)
{
if(Data[j]>10)
{
for(r=1;r<Digit+1;r++)
{
if(Data[Digit]>10)
Digit++; /*当数组中的值大于10时,则位数加一*/
Data[r+1] +=Data[r]/10;/*前一位数组值= 前一位数组值 + 此位数组值除以10*/
Data[r]=Data[r]%10; /*此位数组值 = 此为数组值除以10取余*/
}
}
}
printf("%d!=",i);
for(k=Digit;k>0;k--)
printf("%d",Data[k]); /*输出数组中的内容*/
printf("\n");
}
sleep(5);
}