您的位置:首页 > 理论基础 > 计算机网络

N! http://acm.hdu.edu.cn/showproblem.php?pid=1042

2013-08-06 10:32 531 查看

N!

Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 43866 Accepted Submission(s): 12335


[align=left]Problem Description[/align]
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!

[align=left]Input[/align]
One N in one line, process to the end of file.

[align=left]Output[/align]
For each N, output N! in one line.

[align=left]Sample Input[/align]

1 2 3

[align=left]Sample Output[/align]

1 2 6

[align=left]Author[/align]
JGShining(极光炫影)

#include <stdio.h>
#include<string.h>
#define M 40000
int main()
{
int i,n,j;
int a[M+10];
while(scanf("%d",&n)!=EOF)
{
memset(a,0,sizeof(a));
a[0]=1;
for(i=1;i<=n;i++)
{
for(j=0;j<M;j++)
{
a[j]=a[j]*i;

}
for(j=0;j<M;j++)
{
if(a[j]>=10)
{
a[j+1]+=a[j]/10;
a[j]%=10;
}
}

}
for(i=M;(a[i]==0)&&(i>=0);i--);
if(i>=0)
for(;i>=0;i--)
printf("%d",a[i]);
else
printf("0");
printf("\n");
}
return 0;
}


做这道题,需要用大数相乘的知识,当时比赛,我没用心想大数相乘以至于当时没做出来。今天用了几分钟就搞定了。其实它的原理很简单就是把大数存放在数组中,然后对每一位乘i,乘完之后再考虑进位,然后去0,倒叙输出,有个地方要注意,就是n的范围,可不敢在while里边写n<=10000作为循环条件,因为那样会超时。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: