【算法入门经典】 题目 5.2.2 阶乘的精确值
2014-05-08 13:37
218 查看
5.2.2 阶乘的精确值
输入一个不超过1000的数n,计算n!
很显然,1000的阶乘会超过int的表示范围,所以我们要借助数组来存储。
这里的具体做法是,先生成一个数组,a[0]处放个位数。初始为a[] = {1 0 0 0 0 0 ......} 表示1
然后从2->n,每次将一个数乘到数组中去。
而每次乘一个数,具体做法是设置一个进位值c,初始为0,然后,每次将一个数乘以数组中的每一位,乘完一位得到的数字tmp, tmp%10作为这一位的新值, tmp/10作为进位值c, 之后循环对下一位处理.
5.2.2 阶乘的精确值
输入一个不超过1000的数n,计算n!
很显然,1000的阶乘会超过int的表示范围,所以我们要借助数组来存储。
这里的具体做法是,先生成一个数组,a[0]处放个位数。初始为a[] = {1 0 0 0 0 0 ......} 表示1
然后从2->n,每次将一个数乘到数组中去。
而每次乘一个数,具体做法是设置一个进位值c,初始为0,然后,每次将一个数乘以数组中的每一位,乘完一位得到的数字tmp, tmp%10作为这一位的新值, tmp/10作为进位值c, 之后循环对下一位处理.
#include<iostream> #include<vector> #include<string> using namespace std; int main() { int n; cin>>n; int a[3000] ={0}; a[0] = 1; for(int i=2;i<=n;i++) { int c=0; for(int j=0;j<3000;j++) { int tmp = a[j]*i + c; a[j] = tmp%10; c = tmp/10; } } int k; for(k=3000-1;k>=0;k--) { if(a[k]!=0) break; } for(int m=k;m>=0;m--) cout<<a[m]; cout<<endl; }
相关文章推荐
- 【算法入门经典】 题目:5.1.3 周期串
- 【算法入门经典】 回溯法排列组合
- 【算法入门经典】 字符串处理部分总结
- 【算法入门经典】 高精度部分总结
- 【算法入门经典】 第三章
- 【算法入门经典】 第二章
- 刘汝佳《算法竞赛入门》推荐题目整理
- 如何获得程序运行时间?
- 第2章 循环结构程序设计 习题
- 第1章 程序设计入门 习题
- 算法入门经典(一)数组和字符串
- [算法竞赛入门经典] UVA 12174 - Shuffle
- [算法竞赛入门经典] UVA 714 - Copying Books
- [算法竞赛入门经典] UVA 1471 - Defense Lines
- [算法竞赛入门经典] UVA 1152 - 4 Values whose Sum is 0 | POJ 2785
- [算法入门经典] 区间最少覆盖问题 UVA 10020 - Minimal coverage
- [算法入门经典] 8.2 归并排序
- [算法入门经典] 8.1.3 分治法 求最大连续和
- [算法入门经典] 7.5.3 八数码问题 | HDU 1043
- [算法入门经典] 例题7-3 倒水问题 | HDU 1495