记录编号 47627 评测结果 AAAAAAAAAA
题目名称 阶乘 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.434 s
提交时间 2012-11-02 16:59:24 内存使用 2.57 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;

struct bint
{
	int len,num[10000];
};

bint bchange(int num)
{
	bint a={0};
	if (!num)
	{
		a.len=1;
		return(a);
	}
	while (num)
	{
		a.num[a.len++]=num%10;
		num/=10;
	}
	return(a);
}

bint bmul(bint a,bint b)
{
	bint c={0};
	int i,j,jin;
	c.len=a.len+b.len-1;
	for (i=0;i<a.len;i++)
		for (j=0;j<b.len;j++)
			c.num[i+j]+=a.num[i]*b.num[j];
	jin=0;
	for (i=0;i<=c.len;i++)
	{
		c.num[i]+=jin;
		jin=c.num[i]/10;
		c.num[i]%=10;
	}
	if (c.num[c.len])
	{
		c.len++;
	}
	return(c);
}

int main(void)
{
	freopen("fact4.in","r",stdin);
	freopen("fact4.out","w",stdout);
	int i,n;
	bint num=bchange(1);
	cin>>n;
	for (i=2;i<=n;i++)
		num=bmul(num,bchange(i));
	for (i=0;i<num.len;i++)
		if (num.num[i]!=0)
		{
			cout<<num.num[i]<<endl;
			break;
		}
	return(0);
}