大数运算
开发环境: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