欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

运用向量求10000!的阶乘

  我们知道,电脑里面的10000的数阶乘结果肯定是不能用int类型存储的,也就是说,平常的方法是不能来求得这个结果的。下面,我介绍一些用向量来模拟这个算法,其中向量里面的每一位都是代表一个数。

#include <iostream>
#include <vector>

using namespace std;

//就是n的阶乘
void calculate(int n){
	vector<int> v;
	v.push_back(1);

	unsigned int height = 0;
	int i = 1;
	int j = 0;
	unsigned int temp = 0;

	for(; i <= n; i++){
		height = 0;
	 	for(j = v.size() - 1; j >= 0; j--){
			temp = v[j] * i + height;
			height = 0;
			if(temp > 9){//说明进位了,取得高位,也就是进位
				height = temp / 10;
			}
			v[j] =  temp % 10;
		}
		if(j < 0){
			if(height != 0){
				while(height){
					v.insert(v.begin(), height % 10);
					height /= 10;
				}
			}
		}

	}
	for(j = 0; j < v.size(); j++){
		cout << v[j];
	}
	cout << endl;
}

int main(){

	calculate(10000);
	return 0;
}

别说10000,好几十万都能求,不过貌似时间比较慢,不知道大家觉得里面有没有优化的地方?
结果:10000!= 50102268890189101673572058661410011723664762657835396364297819011647056170279631......
由于太长,这里省了。

本博客文章除特别声明,全部都是原创!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【运用向量求10000!的阶乘】(https://www.iteblog.com/archives/61.html)
喜欢 (3)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!