6-1 大整数求和(运算符重载)DeBug

#include <iostream>
#include <string>
using namespace std;

/* 请在这里填写答案 */
class BigInt{
public:
    string num;
    BigInt()
    {}
    BigInt(string nu)
    {num=nu;}
friend ostream& operator <<(ostream& output,BigInt&t);
friend istream& operator >>(istream& input,BigInt&t);
friend BigInt operator + (BigInt& r1,BigInt& q1);
};
void reverse(string&r);
void reverse(string&r)
{
    int len=r.size();
    char c;
    for(int i=0;i<len/2;i++)
	{
		c=r[i];
		r[i]=r[len-i-1];
		r[len-i-1]=c;
	}
}
BigInt operator + (BigInt& r1,BigInt& q1)
{
	int l1,l2,i,k;
	char c;
	string r,q;
	char add[100];
    add[0]='0';
	r=r1.num;//原对象不可修改
	q=q1.num;
	l1=r.size();
	l2=q.size();
	reverse(r);//将字符串倒序
	reverse(q);
	if(l1>l2)for(i=l2;i<l1;i++)q+="0";//为较短数字补零,方便后续加法
	else for(i=l1;i<l2;i++)r+="0";//同时 i 成为串长的较大者

	for(k=0;k<i;k++)
	{
		c=(r)[k]+(q[k]-'0');
		if(c>'9')
        {
			c-=10;
			add[k]+=(c-'0');
			add[k+1]='1';//进位,同时确保最高位可进位
		}
		else{
			add[k]+=(c-'0');
			add[k+1]='0';
		}
	}
    if(add[k]=='0')add[k]='\0';//判断最高位是否进位
    else add[k+1]='\0';
    string add1=string(add);
    reverse(add1);
    return BigInt(add1);
}
ostream& operator <<(ostream&output,BigInt&t)
{
    output<<t.num;
    return output;
}
istream& operator >>(istream& input,BigInt&t)
{
    input>>t.num;
    return input;
}
int main(){
    BigInt a, b, c;
    cin>>a>>b;
   c=a+b;
    cout<<a<<"+"<<b<<"="<<c<<endl;
    return 0;
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赤城封雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值