大数计算
发布时间: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; }
? 运行结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |