您的位置:首页 > 其它

51Nod-1057 N的阶乘

2018-01-02 00:46 375 查看
输入N求N的阶乘的准确值。Input
输入N(1 <= N <= 10000)
Output
输出N的阶乘
Input示例
5
Output示例
120

没有一发AC,好意外,不过终于TLE了~~
本题是需要压位的,一般写的大数运算,每个数代表大数的一位(存值0~9),大数有多少位用多少个数表示。那么压位的含义将相当于每个数代表大数的多位,本题可以为5位(存值0~9999),5位的话,对于一个2001位的大数,一般方法要用2001大小的数组存储,而压位的话只需要401大小的数组存储即可。好处就是大大缩短每次逐位相乘for(int j=0;j<len;j++){...}的时间。
感觉说的不是很好,友情链接:http://blog.csdn.net/ssssssay/article/details/52102173
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int s[11000],len,n;
int main()
{
scanf("%d",&n);
s[0]=len=1;
int t=0,u=0;
for(int i=2;i<=n;i++){
for(int j=0;j<len;j++){//逐位相乘
t=s[j]*i+u;
s[j]=t%100000;
u=t/100000;
}
while(u){//进位处理
s[len++]=u%100000;
u/=100000;
}
}
//cout<<len<<endl;
printf("%d",s[len-1]);
for(int i=len-2;i>=0;i--)
printf("%05d",s[i]);//输出格式!
putchar('\n');
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: