刚开始我见到网上的视频教程里有关于大数的实现,他是使用的链表来存储数值,我开始尝试也使用链表,但是失败了,我又试着使用数组来实现,经过两天的奋战,终于把这个类实现了,但遗憾的是只实现了加减法,因为自己的知识有限,未能实现乘法除法运算,如果有大神知道如何实现,小弟我感激不尽。
直接上代码
//文件BigNumber.h
#ifndef BIGNUMBER_H
#define BIGNUMBER_H
#include <iostream>
#include <string>
class BigNumber
{
public:
BigNumber();
BigNumber(std::string s_16);
BigNumber(const BigNumber &number);
/************************************************************************/
/* 改变数值的操作 */
/************************************************************************/
void setMaxValue();
void setMinValue();
BigNumber& operator++();//前缀重载
const BigNumber operator++(int);//后缀重载
BigNumber& operator--();//前缀重载
const BigNumber operator--(int);//后缀重载
const BigNumber& operator=(const BigNumber &number);
const BigNumber& operator+=(const BigNumber &number);
const BigNumber& operator-=(const BigNumber &number);
/************************************************************************/
/* 基本运算操作 */
/************************************************************************/
const BigNumber operator+(const BigNumber &number);
const BigNumber operator-(const BigNumber &number);
const BigNumber operator*(const BigNumber &number);//————————未完成
const BigNumber operator/(const BigNumber &number);//————————未完成
/************************************************************************/
/* 大小比较操作 */
/************************************************************************/
bool operator>(const BigNumber &number);
bool operator<(const BigNumber &number);
bool operator==(const BigNumber &number);
bool operator<=(const BigNumber &number);
bool operator>=(const BigNumber &number);
/************************************************************************/
/* 输出操作 */
/************************************************************************/
friend std::ostream& operator<<(std::ostream &os, BigNumber &number);
friend std::istream& operator>>(std::istream &is, BigNumber &number);
const static unsigned int MaxValue = 0xFFFFFFFF;//一个无符号整数的最大值
const static unsigned int MinValue = 0x00000000;//一个无符号整数的最小值
const static unsigned int Size = 100;//存储区大小
private:
unsigned int data[Size];//存储区
void _add(unsigned int data[], unsigned int posion);//进位操作
void _sub(unsigned int data[], unsigned int posion);//借位操作
unsigned char toBit4(char c);//字符转数值
char fromBit4(unsigned char c);//数值转字符
void set_Bit16(std::string s_16);
std::string get_Bit16();
};
#endif
//文件BigNumber.cpp
#include "BigNumber.h"
/************************************************************************/
/* 默认构造函数,初始数值为0 */
/************************************************************************/
BigNumber::BigNumber()
{
setMinValu