hdu1042 N! 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042
大数(!!)
题目大意:n的阶乘。
题目分析:大数
代码如下:
#include <stdio.h>
int main()
{
int m,c,a[10000],i,j,n;
while(scanf("%d",&n)!=EOF)
{
a[0]=1;
m=0; //m记录总位数,4m约等于总位数精确值
for(i=1;i<=n;i++)
{
c=0;
for(j=0;j<=m;j++)
{
a[j]=a[j]*i+c;//本元素数值=相乘结果+低位进位位
c=a[j]/10000;//一个数组元素最多存4位,判是否溢出
a[j]%=10000;//手动去除溢出部分
}
if(c)
{
m++;
a[m]=c;
}
}
printf("%d",a[m]);
for(i=m-1;i>=0;i--)
{
printf("%.4d",a[i]);//除先位外,后每4位补齐至4
}
printf("\n");
}
return 0;
}
PS:每4位为一计数单元,有特色且高效。
由本题%.4d中,.4的意思分析可得,小数点后的4是取四位有效数字的意思(整数情况),而非精确到小数点后4位(小数情况)。