51Nod-1057 N的阶乘
2018-01-02 00:46
375 查看
输入N求N的阶乘的准确值。Input
没有一发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;
}
输入N(1 <= N <= 10000)Output
输出N的阶乘Input示例
5Output示例
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;
}
相关文章推荐
- 大数阶乘(10000级别) 51Nod 1057
- 51nod 1057 N的阶乘
- 51nod_1057 N的阶乘(大数)
- 51nod 1057 N的阶乘 (水题ing……)
- 51Nod 1057 N的阶乘
- 51Nod-1057-N的阶乘
- 51nod 1057 N的阶乘(大数-划分)
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51NOD 1057 N的阶乘
- 51Nod 1057 N的阶乘(数论)
- 51Nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51Nod 1057 N的阶乘(模拟进制&进位)
- 51nod 1057 N的阶乘
- 51Nod-1057-N的阶乘
- 【51Nod】1008 N的阶乘 mod P
- 51NO - 1057 N的阶乘
- 51nod 1058 N的阶乘的长度(斯特林近似)
- 51nod 1003 阶乘后面0的数量