数据精度问题
#include<stdio.h>
#include<math.h>
main()
{int i=0,j,k,m,t=1,q,g;
int a[10],b[10];
long int s,N=0;
printf("Please input a number(<=104):\n");
//输入所要求和的数
do
{
{scanf("%d",&b[0]);
if(b[0]!=0) {a[0]=b[0]; }
else break;
}
//进行求和
t=1;
s=0;
N=0;
//if(b[0]>=19) {(long ) N, s;}
for(m=1;m<=a[0];m++)
{for(k=1;k<=m;++k) {t=t*k;}
s=m*t;
N=N+s;
t=1;
}
printf("\n");
//printf("1*1!+2*2!+...+%d*%d!=%ld\n",b[0],b[0],N);
//printf("\n");
if(N<10000) printf("%d\n",N);
else
{q=(int)(log10(N)+1);//检测数的位数
for(i=1,j=1;i<=(q-4);i++)
{j=10*j;}
g=N/(j);printf("%d",g);//输出前四位
}
printf("\n");
}
while(b[0]!=0);
return 0;
}
不知道怎么回事,当输入数据大于18后就不对呢!
请哪位高手帮我解决一下!急!