大整数计算(运算符重载)

本文介绍了如何使用C++定义大整数类CBigInteger,并通过运算符重载实现大整数的加、减、乘操作。大整数类的数据成员为一个字符指针,支持带参和无参构造函数,以及输入和输出的重载。文章提供了样例输入和输出,以及参考链接用于字符数组的乘法实现。
摘要由CSDN通过智能技术生成

大整数计算(运算符重载)

题目描述

定义大整数类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
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值