hdoj-1042 N!
2015-08-05 16:07
387 查看
题目详见http://acm.hdu.edu.cn/showproblem.php?pid=1042
搜索
对于大数(比如1000的阶乘)我们找不到一个数据类型存放这个数
1.用数组模拟大数的运算。
2.开一个比较大的整型数组,数组的元素代表数组的某一位。
3.通过对数组元素的运算模拟大数的运算。
4.将数组输出(最后去掉前导0,即如果结果是342,那么就不能输出为0342)
code1:数的低位存在数组中的低位,输出时倒过来从数组高位到低位输出
个人比较喜欢code2
code2:[b]数的低位存在数组中的高位,输出时直接从低位开始输出[/b]
搜索
对于大数(比如1000的阶乘)我们找不到一个数据类型存放这个数
1.用数组模拟大数的运算。
2.开一个比较大的整型数组,数组的元素代表数组的某一位。
3.通过对数组元素的运算模拟大数的运算。
4.将数组输出(最后去掉前导0,即如果结果是342,那么就不能输出为0342)
code1:数的低位存在数组中的低位,输出时倒过来从数组高位到低位输出
//#include<cstdio> #include<iostream>//C++中标准输入输出流,没有iostream输出有错 #include<cstring> using namespace std; const int maxn=36000;//10!约有35660位 //数组稍微开大点 以免不小心没有算准这个“正好合适”的数值,而导致数组小了,产生越界错误。 int a[maxn]; int main() { int n,i,j,c,s; while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a));//数组的初始化 memset(a/*数组名*/,0/*要赋予的值*/ ,sizeof(a)/*数组元素个数*/) a[0]=1; for(i=1;i<=n;i++) { c=0; for(j=0;j<maxn;j++)//数的低位存在数组中的低位 { s=a[j]*i+c;//逐位相乘得到的值(可能>=10) a[j]=s%10;//考虑进位 第J位上的数 (数组中每个位置的值只能是一位数) c=s/10;// 向高位进位的值 } } for(j=maxn-1;j>=0;j--)//从高位向低位扫描 找到第一个不是零的数 (该for语句的循环体为空语句) if(a[j]) //for循环里的j一直自减直到a[j]!=0跳出for循环 break; for(i=j;i>=0;i--) printf("%d",a[i]); printf("\n"); } return 0; }
个人比较喜欢code2
code2:[b]数的低位存在数组中的高位,输出时直接从低位开始输出[/b]
//#include<cstdio> #include<iostream>//C++中标准输入输出流,没有iostream输出有错 #include<cstring> using namespace std; const int maxn=36000;//10!约有35660位 //数组稍微开大点 以免不小心没有算准这个“正好合适”的数值,而导致数组小了,产生越界错误。 int a[maxn]; int main() { int n,i,j,c,s; while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a));//数组的初始化 for(i=1,a[maxn-1]=1;i<=n;i++) { c=0; for(j=maxn-1;j>=0;j--)//数的低位存在数组中的高位 { s=a[j]*i+c; a[j]=s%10; c=s/10; } } for(j=0;j<maxn;j++) if(a[j]) break; for(i=j;i<maxn;i++) printf("%d",a[i]); printf("\n"); } return 0; }
相关文章推荐
- js 利用闭包循环给li绑定参数不同的点击事件
- Android Data Binding实战(一)
- 高悬赏“英雄贴” 你敢揭吗?
- vim 学习总结
- BZOJ 2748 音量调节
- 杭电acm 2520 我是菜鸟,我怕谁
- HDU 4417 Super Mario
- iOS 8 新特性介绍
- android中activity传对象对应该注意的地方
- 高质量HTML
- testlink 安装方法
- Android应用实例之---使用Linkify + 正则式区分微博文本链接及跳转处理
- MEF——.NET中值得体验的精妙设计
- 【Lua】【1】Lua游戏脚本语言入门(转载)
- struts2 + ajaxfileupload.js 多图上传
- 全民消消乐 联通sdk对接
- IntelliSense: 后面有“::”的名称一定是类名或命名空间名
- hibernate持久化对象状态 【整个流程讲解非常详细】
- MongoDB——分片
- 正向代理 反向代理 CDN