ss

#include "BigNum.h"
#include <math.h>
//Download by http://www.codefans.net
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;
};

 

 

/*******************************************************************
 *                 大数运算类(支持大数的加减乘除和赋值运算)        *
 *                  by czlin(Xi'an JiaoTong University)            * 
 *                  email:czlin@hkem.com                           *
 *     你可以自由复制和传播该程序,但请保留上述说明    *
 *******************************************************************                    
 *                                                                 *
 * 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();           //取得该数的指数部分
};

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值