超精度运算之大整数求阶乘
来源:互联网 发布:女程序员会嫁什么人 编辑:程序博客网 时间:2024/05/22 00:37
网上也有很多讲解,,可以看了很多感觉网上写的真的很乱、很难理解,于是自己琢磨了两个多小时改了又改终究是写出了蛮简单的代码,希望阅读者能受益。
代码贴上:
#include <bits/stdc++.h>using namespace std;void factorial( int n , vector <int> &p ){//反序存储以适应计算习惯,即例如数值为52032是以23025顺序存进vecter里边的。 int i=2; p.push_back( i ); for( i=3; i<=n; ++i ){// N ! = 2*3*4*…*(N-1)*N . 此循环为遍历因子 for(unsigned int j=0; j<p.size(); ++j){ if( 0==p[ j ] ) continue; //末位值为0不需要再乘,优化代码 p[ j ] *= i ;//必须先把临时结果值逐位都乘上 i ,先有各个位数上的值动态改变 } for(unsigned int j=0; j<p.size(); ++j){//然后再处理进位问题 if( p[j] > 9 ){//用if不用while,p[j]%=10一步到位 if( j == p.size() - 1 ) { p.push_back( p[ j ] / 10 ) ; //进位,插入进位值 p[ j ] %= 10 ; //注意计算顺序不能搞混! } else{ p[ j+1 ] += ( p[ j ] / 10 ) ; p[ j ] %= 10 ; } } } } for( i=p.size()-1; i>=0; --i ) printf("%d",p[i]); printf("\n%d\n",p.size()); p.clear();}int main(){ int num; vector <int> fac; while( scanf("%d",&num) != EOF){ if(num < 0 ) printf("Input Error ! Try one more time please !\n") ; else if( num <=1 ) printf("1\n") ; else factorial( num, fac ) ; } return 0;}
另外,附上自己看了感觉还蛮好的两篇文章。
一位老师写的总结点击打开链接
http://www.doc88.com/p-3456723655573.html
还有就是阶乘列表点击打开链接
http://blog.csdn.net/lzmtw/article/details/1344490
欢迎指教!!
0 0
- 超精度运算之大整数求阶乘
- 超精读运算之大整数相加
- 求大整数的阶乘
- 大整数乘法 求阶乘
- 求大整数的阶乘
- 求大整数的阶乘
- 求大整数的阶乘
- 大整数存储及运算——求100的阶乘
- 大整数的乘法与阶乘运算
- 求大整数的阶乘(hdu1042)
- 求大整数的阶乘的方法
- 大精度整数三种运算(加法,减法,乘法)
- 大整数运算之加减乘除
- 大整数阶乘的运算(可以计算1000!)
- Java 实现大整数加法、乘法、阶乘运算
- 九度OJ 1076 N的阶乘 (大整数运算)
- 练习系统 实验三 求大整数的阶乘
- 大整数阶乘计算
- mysql 分组统计 组内按时间倒序
- RocketMQ与Kafka对比
- 二维坐标变换三维坐标未解答
- HTML 入门
- Java中普通代码块,构造代码块,静态代码块区别
- 超精度运算之大整数求阶乘
- java.util.List
- Solr分组聚合查询之StatsComponent
- poj3255 Roadblocks (次短路径问题)
- Android加密算法之非对称加密RSA
- Android学习之RecyclerView带刺的玫瑰
- HTML 中的表单
- 如何在 Objective-C 项目中使用 Swift 类...to be continued...
- Java实现二叉树的遍历