看似很简单的一道题 (openjudge 1.4 16题)

描述

求10000以内n的阶乘。

输入 只有一行输入,整数n(0<=n<=10000)。 输出

一行,即n!的值。


样例输入:

样例输出:

6

先放代码:

#include 
#include 
using namespace std;
int main()
{
	int a[100000],n,w=1,x=0;
	scanf("%d",&n);
	a[1]=1;
	for(int i=1;i<=n;++i)
	{
		x=0;
		for(int j=1;j<=w;++j)
		{
			a[j]=a[j]*i+x;
			x=a[j]/10;
			a[j]%=10;
		}
		while (x>0) 
		{
			w++;
			a[w]=x%10;
			x/=10;
		}
	}
	for(int i=w;i>=1;--i)
	{
		printf("%d",a[i]);
	}
} 
补充另一种写法,比较好用与方便
#include 
#include 
#define maxn 100000
using namespace std;
int a[maxn];
int main()
{
	int n,x=0,k;
	scanf("%d",&n);
	memset(a,0,sizeof(a));
	a[maxn]=1;
	for(int i=1;i<=n;++i)
	{
		x=0;
		for(int j=maxn;j>=1;--j)
		{
			k=a[j]*i+x;
			a[j]=k%10;
			x=k/10;
		}
	}
	k=1;
	while (a[k]==0) ++k;
	for(int i=k;i<=maxn;++i)
	{
		printf("%d",a[i]);
	}
} 

 本题考查的是高精度乘法,第一次写,感觉要死了一样,终于理解了,表示开心,不知读者们是否有过这样的想法,高精度的源代码咱都会打,但是一旦牵扯到在题目中用便懵逼了,不知听谁曾经说,只要打包成函数就可以了,其实不然。今天总算知道怎么用,其实就是一个模板,背掉就好了。 
  
大家若有什么好的方法,请向我这个蒟蒻分享分享,感谢大佬

你可能感兴趣的:(高精度)