|
在求一个数的阶乘的时候,就是定义一个long型或 double型 也只能算到多少位
数,这个位数与机器的字长有关,16位、32 位、64位,假设要一个数的阶乘运算结果超过了64位数就没有办法了,这个问题可以用数组来解决。
void main()
{
int data[40]; //存储位数的数组
int digit; //数据位数变量
int i,j,k,r; //循环计数变量
int N; //输入的值
for(i=1;i<40+1;i++) //初始化数组
data=0;
data[0]=1;
data[1]=1;
digit=1;
printf("Enter a number :");
scanf("%d",&N); //读取n值
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则位数加1
data[r+1]+=data[r] /10;
data[r]=data[r]%10;
}
}
}
printf("%d!=", i ) ;
for(k=digit;k>0;k--) //输出数组中的内容
printf("%d",data[k]);
printf("\n");
}
} |
|