📄 大数运算类.txt
字号:
大数运算类
// BigNum.h
/*******************************************************************
* 大数运算类(支持大数的加减乘除和赋值运算) *
* 你可以自由复制和传播该程序,但请保留上述说明 *
*******************************************************************
* *
* 1. 实现原理: *
* 任何一个数都可以表示成指数形式,如下所示: *
* N=nEe (0=<n的绝对值<=1,e为10的指数幂) *
* 例如100可以表示成1E2,1001可以表示成1.01E3 *
* 类 CBigNumber的成员number为上述的n,exponent为上述的e *
* 2. 如何使用这个类: *
* 你可以把CBigNumber的头文件和实现函数加入你的工程,然后定义 *
* 该类的实例,就可以对这些实例进行加减乘除了(详见示例程序) *
*******************************************************************/
class CBigNumber
{
private:
double number; //数部
int exponent; //指数部分
private:
void Convert(); //将该数转化成标准形式(0<=数部的绝对值<=1)
public:
CBigNumber();
CBigNumber(float num);
CBigNumber(float num,int exp);
CBigNumber operator+(const CBigNumber& b);
CBigNumber operator-(const CBigNumber& b);
CBigNumber operator*(const CBigNumber& b);
CBigNumber operator/(const CBigNumber& b);
CBigNumber operator=(const CBigNumber& b);
double GetNumber(); //取得该数的数部
int GetExp(); //取得该数的指数部分
};
// BigNum.cpp
#include "BigNum.h"
#include <math.h>
CBigNumber::CBigNumber()
{
number=0;
exponent=0;
};
CBigNumber::CBigNumber(float num)
{
number=num;
exponent=0;
Convert();
};
CBigNumber::CBigNumber(float num,int exp)
{
number=num;
exponent=exp;
Convert();
};
void CBigNumber::Convert()
{
if(number==0) return;
while(fabs(number)>=10)
{
number/=10;
exponent+=1;
}
while(fabs(number)<1)
{
number*=10;
exponent-=1;
}
};
CBigNumber CBigNumber::operator+(const CBigNumber& b)
{
CBigNumber result;
int multiple;
multiple=exponent-b.exponent;
if(multiple>0)
{
result.number=number+b.number*pow(10,-multiple);
result.exponent=exponent;
}
else
{
result.number=number*pow(10,multiple)+b.number;
result.exponent=b.exponent;
}
result.Convert();
return result;
};
CBigNumber CBigNumber::operator-(const CBigNumber& b)
{
CBigNumber result;
int multiple;
multiple=exponent-b.exponent;
if(multiple>0)
{
result.number=number-b.number*pow(10,-multiple);
result.exponent=exponent;
}
else
{
result.number=number*pow(10,multiple)-b.number;
result.exponent=b.exponent;
}
result.Convert();
return result;
};
CBigNumber CBigNumber::operator*(const CBigNumber& b)
{
CBigNumber result;
result.number=number*b.number;
result.exponent=exponent+b.exponent;
result.Convert();
return result;
};
CBigNumber CBigNumber::operator/(const CBigNumber& b)
{
CBigNumber result;
if (b.number==0) return 0;
result.number=number/b.number;
result.exponent=exponent-b.exponent;
result.Convert();
return result;
};
CBigNumber CBigNumber::operator=(const CBigNumber& b)
{
number=b.number;
exponent=b.exponent;
return *this;
};
double CBigNumber::GetNumber()
{
return number;
};
int CBigNumber::GetExp()
{
return exponent;
};
/**************************************
*示例程序:计算1000的阶乘
**************************************/
#include "BigNum.h"
#include <stdio.h>
void main()
{
CBigNumber a(1000); //大数形式的1000
CBigNumber b(1); //大数形式的1
CBigNumber result(1); //运算结果,初值为1
int i;
for(i=1000;i>=1;i--)
{
result=result*a;
a=a-b; //减1
}
printf("%fE%d",result.GetNumber(),result.GetExp());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -