SZU面向对象程序设计OJ|【程序填空题】大整数计算(运算符重载)

代码知识点不难,数学上分情况讨论比较麻烦...

OJ还未截止,防撞故先分享思路,完整代码之后更新。

题目描述

定义大整数类CBigInteger(假设最长支持1000位),数据成员为字符串类型(用字符指针或string都可以)。成员函数或友元函数包括:

1)带参构造函数,为字符指针动态分配1001个字符空间。根据参数初始化大整数。

2)  无参构造函数,为字符指针动态分配1001个字符空间。

3)重载运算符+,实现两个大整数的加法。

4)重载运算符-,实现两个大整数的减法。

5)重载运算符*,实现两个大整数的乘法。

6)重载输入,输入大整数。

7)重载输出,输出大整数。

8)析构函数,如果字符指针,释放分配的空间,不可屏蔽。

主函数输入大整数,完成大整数的加、减、乘。主函数代码如下,请补充CBigInteger类。

输入

测试次数

每组测试数据一行: 大整数1 运算符 大整数2

输出

对每组测试数据输出表达式和计算结果,具体格式见样例。

输入样例:

3
100 * -100
-123456789 + 123456
0001 - -123

 输出样例:

100 * (-100) = (-10000)
(-123456789) + 123456 = (-123333333)
1 - (-123) = 124

 代码框架:

//补充CBigInteger类和头文件
/********** Write your code here! **********/


/*******************************************/
int main()
{
    int t;
    char op;
    CBigInteger bigNum1;
    CBigInteger bigNum2;
    
    cin >> t;
    while(t--)
    {
        cin >> bigNum1 >> op >> bigNum2;
        cout << bigNum1 << " " << op << " " << bigNum2 << " = ";
        if(op == '+')
            cout << bigNum1 + bigNum2 << endl;
        else if(op == '-')
            cout << bigNum1 - bigNum2 << endl;
        else if(op == '*')
            cout << bigNum1 * bigNum2 << endl;
    }
    return 0;
}

 参考思路:

        // 加法运算符重载
        CBigInteger operator+(const CBigInteger& other)const;

        // 减法运算符重载
        CBigInteger operator-(const CBigInteger& other) const;

        // 乘法运算符重载
        CBigInteger operator*(const CBigInteger& other) const;

        // 输入运算符重载
        friend istream& operator>>(istream& in, CBigInteger& number) {
            in >> number.value;
            return in;
        }

        // 输出运算符重载
        friend ostream& operator<<(ostream& out, const CBigInteger& number) ;

 除了输入重载较简单以外,其他都要分情况讨论:

为了简化问题,+ - * 都只计算正数的

①加法重载:

正+正  简单相加即可,考虑进位

以下三种情况,需要先取绝对值(去掉字符串的首位),再转换对应加或减

负+正 如 -123 + 23 = 23 - |-123|

正+负 如 123 + -23 = 123 - |-23|

负+负 如 -123 + -10 = -(|-123| + |-10|)

②减法重载:

正-正  ,又分为大-小、小-大,大减小简单相减去即可(考虑借位),小减大= -(大-小)

以下三种情况及小减大,需要先取绝对值(去掉字符串的首位),再转换对应加或减

负-正 如 -123 - 23 = -( |-123| + 23)

正-负 如 123 - -23 = 123 + |-23|

负-负 如 -123 - -10 = |-10| - |-123|

③乘法类似,

④输出重载:

分成四种大情况:

1.字符串首位为0: 再分为全0、非全0(如0002)

2.字符串首位为-,第二位为0

3.字符串首位为-,第二位不为0: 如(-100)

4.其他,直接打印

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值