#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int num[41000];
int n;
int i,j;
int p;
while(scanf("%d",&n)!=EOF)
{
memset(num,0,sizeof(num));
num[1]=1;//这里注意要对num[1]进行初始化
p=0;//赋于初始值
for(i=1;i<=n;i++)
{
for(j=1;j<=40000;j++)
{
num[j]=num[j]*i+p;
p=0;
if(num[j]>9)
{
p=num[j]/10;
num[j]=num[j]%10;
}
}
/*
for(j=1;j<=cnt;j++)
{
num[j]=num[j]*i+p;
p=0;
//printf("%d %d %d\n",i,j,num[j]);
if(num[j]>1000000)
{
p=num[j]/10;
num[j]=num[j]%10;
if(j==cnt)
{
num[j+1]=num[j+1]+p;
p=0;
cnt++;
break;
}
}
}
这里注意不要用这种写法,在数字小的时候比如30,40的时候结果是对的,不过在后来200的时候会错的
因为存储的值超过了整形的范围,这个你可以把我的代码带进去试试看,中间会出现负值的
采取上面的这种方法就不会有错了,因为会保证每一步的num[]中的值都在0-9,自己去理解理解
*/
}
for(i=40000;i>=1;i--)
if(num[i])
break;//输出的时候注意
for(j=i;j>=1;j--)
printf("%d",num[j]);
printf("\n");
}
return 0;
}
hdu 1042 N!
最新推荐文章于 2021-01-23 16:31:43 发布