您的位置:首页 > 其它

hdoj 1042 N!(还是对大数的处理)

2017-05-31 10:05 260 查看
初略估计10000!的阶乘会有将近3000位数。

用二维数组每个单元保存一位数最后会内存溢出,所以我们每个单元保存4位数,减少数组的大小。

注意输出时的细节,每个单元保存4位数,如果数是0的话,要以%04输出。

#include<stdio.h>
using namespace std;
#define M 10001
#define N 10001
int a
[M]={0};
int len
;
void change()
{
int i,j,l,r,temp;l=1;
a[0][0]=1;len[0]=1;
for(i=1;i<N;i++)
{
for(j=0;j<l;j++)
{
a[i][j]=a[i-1][j]*i;
}r=0;
for(j=0;j<l;j++)
{
temp=a[i][j]+r;
a[i][j]=temp%10000;
r=temp/10000;
}
while(r)
{
a[i][l++]=r%10000;
r=r/10000;
}
len[i]=l;
}
}
int main()
{
int n,i;
change();
while(~scanf("%d",&n))
{
if(len
==1) printf("%d\n",a
[0]);
else{
printf("%d",a
[len
-1]);
for(i=len
-2;i>=0;i--)
printf("%04d",a
[i]);
printf("\n");
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  杭电 算法