越界问题,高精度算法到20!时结果都变为7664 0
#include<stdio.h>#include<stdlib.h>
#define N 19
int main()
{
long int a[255];
char str[4];
int i,t,j,k;//定义
a[0]=1;
for(i=1;i<255;i++)
{
a[i]=0;
}//赋初值
for(i=1;i<=N;i++)
{
for(j=0;a[j]>0;j++);
for(t=0;t<j;t++)
{
a[t]*=i;
}//将a[256]每一位大于零的数都乘以i
for(t=0;t<j;t++)
{
a[t+1]+=a[t]/10000;
a[t]=a[t]%10000;
}//进位
}
for(j=0;a[j]>0;j++);
if(a[j+1]>0?k=j+1:k=j);//求a[i]大于0的最高位
for(;k>=0;k--)
{
printf("%4ld",a[k]);
}//输出
}