C++项目 - 大数四则运算

大数运算


开发环境:Windows Visual Studio 2013
项目概述:利用String类实现对大数的读写,以及实现大数之间的加、减、乘、除、取模和比较运算。
使用技术:C++、String类。
项目思想:使用C++类将超过C++中能够存储最大整型变量(long long int)所能存储的范围的数转换成字符串进行存储,将存储大数的字符串拆开进行分析,逐位进行运算存储,实现大数间的加、减、乘、除、取模和比较运算。将大数运算分解成单个字符的运算。

Bignum.h

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include <iostream>
#include <assert.h>
#include <string>
using namespace std;


#define MAX_INT64 9223372036854775807  
#define MIN_INT64 -9223372036854775808 


typedef long long INT64;

class BigData
{
public:
    BigData(INT64 data); 
    BigData(const char *_pdata);  
    BigData operator+(BigData& bigData);  
    BigData operator-(const BigData& bigData);  
    BigData operator*(const BigData& bigData);  
    BigData operator/(const BigData& bigData); 
    BigData operator%(const BigData& bigData);    
    friend std::ostream& operator<<(std::ostream& _cout, const BigData& bigData);  
    //friend std::istream& operator>>(std::istream& _cin, BigData bigData);  
    bool IsINT64Overflow()const; 
private:
    void INT64ToString();  
    std::string Add(std::string left, std::string right);  
    std::string Sub(std::string left, std::string right);  
    std::string Mul(std::string left, std::string right);  
    std::string Div(std::string left, std::string right);  
    bool IsLeftStrBig(char *pLeft, size_t LSize, char *pRight, size_t RSize);  
    char SubLoop(char *&pLeft, int& LSize, char *pRight, size_t RSize);
private:
    INT64 _value;
    std::string _strData;
};

Bignum.cpp

#define _CRT_SECURE_NO_WARNINGS 1
#include "Bignum.h"

BigData::BigData(INT64 data)  
: _value(data)  
, _strData("")  
{
    INT64ToString();  
}
BigData::BigData(const char *_pdata)  
{  
    assert(_pdata);  
    char symbol = _pdata[0];  
    char* pdata = (char*)_pdata;  
    if (symbol == '+' || symbol == '-')  
    {  
        pdata++;  
    }  
    else if (*pdata >= '0'&& *pdata <= '9')  
    {  
        symbol = '+';  
    }  
    else  
    {  
        _value = 0;  
        _strData = '0
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值