加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数计算

发布时间:2020-12-14 03:39:35 所属栏目:大数据 来源:网络整理
导读:// MyTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include iostreamusing namespace std;#ifndef BIG_INT_ARRAY_MAXLEN#define BIG_INT_ARRAY_MAXLEN 50000//大整数计算结果值,最大长度预设#endif//计算n的m次方,n为底数,m为指数void Big
// MyTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

#ifndef BIG_INT_ARRAY_MAXLEN
#define BIG_INT_ARRAY_MAXLEN 50000	//大整数计算结果值,最大长度预设
#endif

//计算n的m次方,n为底数,m为指数
void BigintPow(int n,int m)
{
	int a,i,b;	//a是指数的计次变量;i是第几位之变量; b是输出的计次变量
    int v,s;	//v是进位暂存量; s用来记录整数位数
	int x[BIG_INT_ARRAY_MAXLEN]={0};
	v=0; //清空v的值
	s=1; //不管怎样,s必然>=1,因此整数一定有位数
	x[0]=1; //先让最早要乘的这格阵列值=1
	for(a=1; a<=m; a++)
	{
		for(i=0;i<s;i++)
		{
			x[i]=x[i]*n+v; //各个位数运算式子,v是有进位时要加上去的
			v=x[i]/10; //v>0,进位
			x[i]=x[i]%10; //每格存一位数
			if( v!=0 && i+1 == s) //判断位数是否+1
				s++; //记录整数位数
		}
	}
	
	cout << "pow(" <<n <<"," <<m<<")=";
	for(b=s-1;b>=0;b--) //反向輸出
	{
		cout << x[b];
	}
	cout << endl << "共" << s << "个位數" << endl;
}

//大数阶乘,n!=1*2*3..*n;
void BigintFactorial(int n)
{
	int a,b;	//a是阶乘计次变量;i是第几位之变量; b是输出的计次变量
    int v,s;	//v是进位暂存量; s用来记录整数位数
	int x[BIG_INT_ARRAY_MAXLEN]={0};
	v=0; //清空v的值
	s=1; //不管怎样,s必然>=1,因此整数一定有位数
	x[0]=1; //先让最早要乘的这格阵列值=1
	for(a=1; a<=n; a++)
	{
		for(i=0;i<s;i++)
		{
			x[i]=x[i]*a+v;			//各个位数运算式子,v是有进位时要加上去的
			v=x[i]/10;				//v>0,进位
			x[i]=x[i]%10;			//每格存一位数
			if( v!=0 && i+1 == s)	//判断位数是否+1
				s++;				//记录整数位数
		}
	}
	
	cout << n <<"!" <<"=";
	for(b=s-1;b>=0;b--) //反向输出
	{
		cout << x[b];
	}
	cout << endl << "共" << s << "个位數" << endl;
}


int _tmain(int argc,_TCHAR* argv[])
{
	BigintPow(2,164);
	BigintFactorial(1000);
	system("pause");
	return 0;
}

?

运行结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读