hdoj 1042 N!(高精度)
来源:互联网 发布:切换字体的软件 编辑:程序博客网 时间:2024/04/29 14:13
Problem Description
Givenan integer N(0 ≤ N ≤ 10000), your task is to calculate N!
Input
OneN in one line, process to the end of file.
Output
Foreach N, output N! in one line.
Sample Input
1
2
3
Sample Output
1
2
6
一个阶乘题目,校赛时也有一道,当时觉得很难,现在发现那个还是简单的,这题才是难的。毕竟当时n的限制是3240,现在n<10000.再用以前的方法就toooooooold了
WA或者超空间都有,郁闷啊。
现在的做法是把a[]的数组每一位保存5位,这里要保证乘上10000后不会溢出。10000的阶乘大约是35660.
取100000为进位。
还有一个要说明的是输出用%05d,保证格式,因为每位存的是5位数。
#include<stdio.h>int main(){ int i,j,n; while(scanf("%d",&n)!=EOF) { int a[7201]={0}; a[0]=1; for(i=2; i<= n;i++) { for(j=7200;j>=0;j--) a[j]=a[j]*i; for(j=0;j<=7201;j++) { a[j+1]+=a[j]/100000; a[j]%=100000; } } j=7200; while(!a[j]) j--; printf("%d",a[j--]); while(j>=0) printf("%05d",a[j--]); printf("\n"); } return 0;}
再说下校赛那题的做法,两个字:打表。
1*2*3*……*3239*3240
#include <stdio.h>int a[3245][10005];void fuck(int i){ intj; for(j=0;j<10005;j++) { a[i][j+1]+=a[i][j]/10; a[i][j]%=10; }}void find(int i){ intj; for(j=0;j<10005;j++) a[i-1][j]=a[i-2][j]*i; fuck(i-1);}int main(){ inti,j; intd; for(i=0;i<3245;i++) for(j=0;j<10005;j++) a[i][j]=0; a[0][0]=1; a[1][0]=2; for(i=3;i<3245;i++) find(i); while(1) { scanf("%d",&d); if(d==0)printf("1\n"); else { if(d==-1)break; j=10003; while(a[d-1][j--]==0); for(j++;j>=0;j--) printf("%d",a[d-1][j]); printf("\n"); } } return0;}
做法很奇妙,当用在1042上把3240改成10005时,控制端出来后过了许久才能输入….>_<
还有奇葩的模板,另一种做法,不过也差不多
int factorial(int n){long a[10000];int i,j,l,c,m=0,w;a[0]=1; for(i=1;i<=n;i++) { c=0; for(j=0;j<=m;j++) { a[j]=a[j]*i+c; c=a[j]/10000; a[j]=a[j]%10000; } if(c>0) {m++;a[m]=c;} } w=m*4+log10(a[m])+1;printf("\n%ld",a[m]); for(i=m-1;i>=0;i--) printf("%4.4ld",a[i]);return w;}
- hdoj 1042 N!(高精度)
- 高精度-HDU-1042-N!
- hdu 1042 N! 高精度运算
- Hdu 1042 N! (高精度数)
- HDU 1042 N!(高精度)
- hdu 1042 N! 高精度乘法
- 高精度N!
- N!高精度
- N!高精度
- HDOJ 1042 N!
- HDOJ 1042 N!
- ACM HDOJ 1042 (N!)
- HDOJ 1042 N!
- hdoj 1042 N!
- N! hdoj 1042
- HDOJ 1042 N!
- hdoj 1042 N!
- hdoj 1042 N!
- 第四代时间管理
- java中使用泛型
- 人际风格的四大分类
- Hibernate逆向工程出现Generating Artifacts错误解决
- 什么是高效沟通
- hdoj 1042 N!(高精度)
- 有效的沟通技巧
- android多个页面滑动视图实现
- IT经理的两条职业路做管理还是管理咨询
- 有效沟通的六个步骤
- 分页的实现分析
- JSONArray 源码
- android环境搭建
- JSONObject 源码