大整数计算(运算符重载)
题目描述
定义大整数类CBigInteger(假设最长支持1000位),数据成员为一个字符指针。成员函数或友元函数包括:
1)带参构造函数,为字符指针动态分配1001个字符空间。根据参数初始化大整数。
2) 无参构造函数,为字符指针动态分配1001个字符空间。
3)重载运算符+,实现两个大整数的加法。
4)重载运算符-,实现两个大整数的减法。
5)重载运算符*,实现两个大整数的乘法。6)重载输入,输入大整数。
7)重载输出,输出大整数。
8)析构函数,释放分配的空间。该函数不可屏蔽。
主函数输入大整数,完成大整数的加、减、乘。主函数代码如下,不可修改。
输入
测试次数
每组测试数据一行: 大整数1 运算符 大整数2
输出
对每组测试数据输出表达式和计算结果,具体格式见样例。
样例输入
3
100 * -100
-123456789 + 123456
0001 - -123
样例输出
100 * (-100) = (-10000)
(-123456789) + 123456 = (-123333333)
1 - (-123) = 124
备注
字符数组乘法参考
https://www.jianshu.com/p/8a4c0f5ed079
https://www.cnblogs.com/alderheart/p/10958615.html
#include <iostream>
#include <cstring>
using namespace std;
class CBigInteger
{
private:
char *p;
public:
CBigInteger(char *num);
CBigInteger();
CBigInteger(const CBigInteger &b);
~CBigInteger(){delete []p;}
CBigInteger operator+(const CBigInteger &r);
CBigInteger operator-(CBigInteger &r);
CBigInteger operator*(CBigInteger &r);
bool operator>=(CBigInteger &r);
friend istream& operator>>(istream &in,CBigInteger &r);
friend ostream& operator<<(ostream &out,CBigInteger r);
};
CBigInteger::CBigInteger(char *num) {
p = new char[1001];
strcpy(p,num);
}
CBigInteger::CBigInteger() {
p = new char[1001];
}
CBigInteger::CBigInteger(const CBigInteger &b) {
p = new char[1001];
strcpy(p,b.p);
}
CBigInteger CBigInteger::operator+(const CBigInteger &r) {
//正数+正数 或者 负数加负数
CBigInteger res,temp1(this->p),temp2(r.p);
char sign='+';
int len1=strlen(temp1.p),len2=strlen(temp2.p);
if(*this->p=='-' && *r.p=='-')
{
sign='-';
for(int tt=1;tt<len1;tt++)
temp1.p[tt-1]=temp1.p[tt];
temp1.p[len1-1]='\0';
for(in