杭电HDU_1042
2015-04-26 15:47 HaodongGUO 阅读(88) 评论(0) 收藏 举报ps:刚才重打了这段代码,之前的有错
#include <iostream>
#include<cstdio>
using namespace std;
#define MAX 10000
#define BASE 100000//基度可以选不同的值 ,eg:80000
int h[MAX];//10000大小的数组
int main()
{
int i,j,k,carry;
int n;
while(scanf("%d",&n)!=EOF)
{
memset(h,0,MAX*sizeof(int));
h[0]=1;//第一个数标记为1,当输入为0,和1时,输出此值
for(i=2;i<=n;i++)
{
carry=0;//表示进位
//将阶乘存到数组中,如果是0,1,将会跳过这一步
for(k=0;k<MAX;k++)//遍历所开数组的每一个数进行进位以及数的保存
{
carry=carry+i*h[k];
h[k]=carry%BASE;//将该位未进位的数保存
carry=carry/BASE;//将进位的数保存
}
}
//打印数组
for(j=MAX-1;j>=0;j--)
{
if(h[j])
{
break;
}
}
printf("%d",h[j]);
for(i=j-1;i>=0;i--)//当输入为0,1时,跳过此for循环
{
printf("%05d",h[i]);
}
printf("\n");
}
return 0;
}
浙公网安备 33010602011771号