简单的高精度N!,计算100以内的
#include
<
stdio.h
>
;
#include < string .h >
int a[ 101 ][ 161 ];
int getn() ... {
int i,j;
memset(a,0,sizeof(a));
a[1][160]=1;
for (i=2;i<=100;i++)...{
for (j=160;j>0;j--)
a[i][j]=a[i-1][j]*i;
for (j=160;j>0;j--)
if (a[i][j]>=10) ...{a[i][j-1]+=a[i][j]/10; a[i][j]=a[i][j]%10;};
}
return 0;
}
int answer( int n) ... {
int i,j;
for (j=1;j<160;j++)
if (a[n][j]>0) break;
for (i=j;i<=160;i++)...{
printf("%d",a[n][i]);
}
printf(" ");
return 0;
}
int main() ... {
getn();
int i,t,n;
scanf("%d",&n);
for (i=1;i<=n;i++)...{
scanf("%d",&t);
answer(t);
}
return 0;
}
#include < string .h >
int a[ 101 ][ 161 ];
int getn() ... {
int i,j;
memset(a,0,sizeof(a));
a[1][160]=1;
for (i=2;i<=100;i++)...{
for (j=160;j>0;j--)
a[i][j]=a[i-1][j]*i;
for (j=160;j>0;j--)
if (a[i][j]>=10) ...{a[i][j-1]+=a[i][j]/10; a[i][j]=a[i][j]%10;};
}
return 0;
}
int answer( int n) ... {
int i,j;
for (j=1;j<160;j++)
if (a[n][j]>0) break;
for (i=j;i<=160;i++)...{
printf("%d",a[n][i]);
}
printf(" ");
return 0;
}
int main() ... {
getn();
int i,t,n;
scanf("%d",&n);
for (i=1;i<=n;i++)...{
scanf("%d",&t);
answer(t);
}
return 0;
}