51nod1057 N的阶乘
来源:互联网 发布:会议纪要整合软件 编辑:程序博客网 时间:2024/05/19 09:17
链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1057
题意:中文题。
分析:裸的高精度会T,压压位就过了。
代码(压4位):
#include<map>#include<set>#include<cmath>#include<queue>#include<bitset>#include<math.h>#include<vector>#include<string>#include<stdio.h>#include<cstring>#include<iostream>#include<algorithm>#pragma comment(linker, "/STACK:102400000,102400000")using namespace std;const int N=50005;const int mod=100000000;const int MOD1=1000000007;const int MOD2=1000000009;const double EPS=0.00000001;typedef long long ll;const ll MOD=998244353;const int INF=1000000010;const ll MAX=1000000000000;const double pi=acos(-1.0);typedef double db;typedef unsigned long long ull;int a[N];int main(){ int i,j,n; scanf("%d", &n); a[0]=a[1]=1; for (i=2;i<=n;i++) { for (j=1;j<=a[0];j++) a[j]*=i; for (j=1;j<a[0];j++) a[j+1]+=a[j]/10000,a[j]%=10000; while (a[a[0]]>9999) { a[a[0]+1]+=a[a[0]]/10000; a[a[0]]%=10000;a[0]++; } } printf("%d", a[a[0]]); for (i=a[0]-1;i;i--) if (a[i]<10) printf("000%d", a[i]); else if (a[i]<100) printf("00%d", a[i]); else if (a[i]<1000) printf("0%d", a[i]); else printf("%d", a[i]); printf("\n"); return 0;<h3>}</h3>
代码(压8位):
#include<map>#include<set>#include<cmath>#include<queue>#include<bitset>#include<math.h>#include<vector>#include<string>#include<stdio.h>#include<cstring>#include<iostream>#include<algorithm>#pragma comment(linker, "/STACK:102400000,102400000")using namespace std;const int N=50005;const int mod=100000000;const int MOD1=1000000007;const int MOD2=1000000009;const double EPS=0.00000001;typedef long long ll;const ll MOD=998244353;const int INF=1000000010;const ll MAX=1000000000000;const double pi=acos(-1.0);typedef double db;typedef unsigned long long ull;ll a[N];int main(){ int j,n; scanf("%d", &n); a[0]=a[1]=1ll; for (ll i=2;i<=n;i++) { for (j=1;j<=a[0];j++) a[j]*=i; for (j=1;j<a[0];j++) a[j+1]+=a[j]/100000000ll,a[j]%=100000000ll; while (a[a[0]]>99999999ll) { a[a[0]+1]+=a[a[0]]/100000000ll; a[a[0]]%=100000000ll;a[0]++; } } printf("%d", a[a[0]]); for (j=a[0]-1;j;j--) if (a[j]<10ll) printf("0000000%I64d", a[j]); else if (a[j]<100ll) printf("000000%I64d", a[j]); else if (a[j]<1000ll) printf("00000%I64d", a[j]); else if (a[j]<10000ll) printf("0000%I64d", a[j]); else if (a[j]<100000ll) printf("000%I64d", a[j]); else if (a[j]<1000000ll) printf("00%I64d", a[j]); else if (a[j]<10000000ll) printf("0%I64d", a[j]); else printf("%I64d", a[j]); printf("\n"); return 0;}
0 0
- 51nod1057 N的阶乘
- 51nod1057 N的阶乘
- 51Nod1057 N的阶乘
- 51nod1057 N的阶乘 压位
- 51nod N的阶乘
- 51nod N的阶乘
- N的阶乘--N!
- 大数阶乘-N的阶乘
- 51nod1058 N的阶乘的长度
- n(n<100)的阶乘
- 高精度N的阶乘-N!
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51nod 1057 N的阶乘
- 51nod_1008 N的阶乘 mod P
- 51nod_1057 N的阶乘(大数)
- Android自学历程—手把手教你使用OkHttp(基础篇)
- 最小费最大流,最小权最大匹配,拆点法(最优巴士路线设计 uva 1349)
- 杨辉三角,一个vector实现,不复制,不用队列。
- 计算几何-多边形的重心
- FileZilla Server提权
- 51nod1057 N的阶乘
- STM32/ARM Cortex-M3复位序列
- 关于响应式布局的相关介绍——和派孔明
- MS11-080、MS11-046两个提权代码
- OC中的内存管理机制
- java int与integer的区别
- 通过崩溃地址找出源代码的出错行
- 安卓学习-Handler
- 蛇形填充数组