您的位置:首页 > 其它

阶乘的精确值

2010-06-05 22:59 190 查看
#include<iostream>
#include<string>
using namespace std;
const int maxn=3000;
int f[maxn];
int main()
{
int n;
int i,j;
cin>>n;
memset(f,0,sizeof(f));
f[0]=1;
for(i=2;i<=n;i++)
{
int c=0;
for( j=0;j<maxn;j++)
{
int s=f[j]*i+c;
f[j]=s%10;
c=s/10;
}
}
for(j=maxn-1;j>=0;j--) if(f[j]) break; //忽略前导0;
for( i=j;i>=0;i--) cout<<f[i];
cout<<endl;
return 0;

}


输入:30

输出:265252859812191058636308480000000
/*一个比较大的整数的阶乘,精确结果就需要用数组来保存。1000的阶乘大概是4*pow(10,2567),
所以我们就用一个3000个元素的数组f来保存。f[0]保存个位,f[1]保存十位......
在输出的时候要输出前导0。*/

看代码的一点经验:我不是一个高手,有时候看代码看了老半天都看不懂,有些代码表面上是看不出什么的,这个时候就要慢慢来,按着代码一步步的推算。这个代码首先我没看懂,我是推算了一下,推到第4、5步的时候就知道了程序原理。看程序看多了,看懂了,写起程序来要顺手多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: