高精度N!
来源:互联网 发布:scrach源码 编辑:程序博客网 时间:2024/04/30 01:41
code1:
最开始的写法是一位一位的乘,而且每次没有计算ans数组的长度,所以速度很慢~
472 KB3484 msG++595 B#include<stdio.h>#include<iostream>#include<string.h>using namespace std;const int N=40000;int ans[N];int main(){ int n; while(~scanf("%d",&n)) { memset(ans,0,sizeof(ans)); ans[0]=1; for(int i=2;i<=n;i++) { int c=0; for(int j=0;j<N;j++) { int s=ans[j]*i+c; ans[j]=s%10; c=s/10; } } int j; for(int i=N-1;i>=0;i--) { if(ans[i]){j=i;break;} } for(int i=j;i>=0;i--)printf("%d",ans[i]); printf("\n"); } return 0;}
进化版:
int 为10 的9位 所以最多可以是四位数乘以四位数..即每一个数组储存的是一个四位数,注意输出 %04d,并且加入了每次数组的长度计算,速度快了很多~
264 KB265 msG++721 B#include<stdio.h>#include<iostream>#include<string.h>using namespace std;const int maxx=40000;const int ma=10000;int a[maxx];int main(){ int n; while(~scanf("%d",&n)) { int len=1; //memset(a,0,sizeof(a)); a[1]=1; for(int i=1;i<=n;i++) { int c=0; for(int j=1;j<=len;j++) { int s=c+a[j]*i; a[j]=s%ma; c=s/ma; } if(c!=0) { a[++len]=c; } } printf("%d",a[len]); for(int i=len-1;i>=1;i--) printf("%04d",a[i]); printf("\n"); } return 0;}
0 0
- 高精度N!
- N!高精度
- N!高精度
- 高精度N的阶乘-N!
- hdoj 1042 N!(高精度)
- 高精度之求N!
- N!(高精度计算)
- 高精度-HDU-1042-N!
- 高精度求N!
- n!(高精度)
- 高精度计算N!
- 高精度-n的阶乘
- 高精度m^n(pku3199)
- 高精度N进制转M进制
- poj 1001 高精度R^N
- poj 2389(高精度)N!
- hdu 1042 N! 高精度运算
- 【高精度】2的n次方
- fflush和fsync的一些总结
- WCF初见之SQL数据库的增删改查
- gSoap 创建Web Service
- 亚马逊2013年推荐的100本书(Mark一下)
- 20000个游戏娱乐音效素材库
- 高精度N!
- struts设计模式
- myeclipse中hibernate连接SQL2005报错--对象名"xx.xxx"无效。
- linux下拷贝整个目录(带链接)
- bind的奥秘
- iOS Runtime
- 性能优化杂谈二
- JSP脚本元素
- STL编程