-->
当前位置:首页 > 题库 > 正文内容

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

Luz4年前 (2021-03-08)题库2756
6-1 大整数求和(运算符重载) (15 分)

BigInt类表示不超过100位的无符号大整数。试重载>>,<<和+,以支持无符号大整数的输入、输出与求和(假设结果仍是一个不超过100位的无符号大整数)。

重载面向BigInt类对象的运算符:

>>
<<
+

裁判测试程序样例:

#include <iostream>#include <string>using namespace std;/* 请在这里填写答案 */int main(){
   BigInt a, b, c;    cin>>a>>b;
  c=a+b;    cout<<a<<"+"<<b<<"="<<c<<endl;    return 0;
}

输入样例:

123456789
987654321

输出样例:

123456789+987654321=1111111110
作者
何振峰
单位
福州大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
class BigInt
{
public:
    string str;
    BigInt() {}
    BigInt(string s)
    {
        str=s;
    }
 
    friend ostream&operator<<(ostream &os, BigInt &bigint)
    {
        os<<bigint.str;
        return os;
    }
    friend istream&operator>>(istream &is,BigInt &bigint)
    {
        is>>bigint.str;
        return is;
    }
    friend BigInt operator+( BigInt &bigint1, BigInt &bigint2);
};
 
BigInt operator+( BigInt &bigint1, BigInt &bigint2)
{
    string a=bigint1.str;
    string b=bigint2.str;
    string temp;
    if(a.size()>b.size())
    {
        temp=a;
        a=b;
        b=temp;
    }
 
    char *sum=new char[b.size()+2];
    int carry=0;
    int count=0;
    int m,n,k;
    int al,bl;
    for (al=a.size()-1,bl=b.size()-1; al>=0; al--,bl--)
    {
        m=a[al]-'0';
        n=b[bl]-'0';
        k=m+n+carry;
        if(k > 9)
        {
            carry=1;
            k-=10;
            sum[count]=k+'0';
        }
        else
        {
            sum[count]=k+'0';
            carry=0;
        }
        count++;
    }
    if(a.size()==b.size() && carry==1) sum[count]='1';
    if(a.size()==b.size() && carry==0)  count--;
 
    int sizeDif=b.size()-a.size();
    int i=sizeDif-1;
    for(bl!=0; i>=0; i--)
    {
        k=b[i]-'0'+carry;
        if(k>9)
        {
            carry=1;
            k-=10;
            sum[count]=k+'0';
 
        }
        else
        {
            sum[count]=k+'0';
            carry=0;
        }
        count++;
        if(i==0 && carry==1) sum[count]='1';
        if(i==0 && carry==0) count--;
    }
    sum[count+1]='\0';
    int j;
    char t;
    int x=count;
    for(j=0; j<=count/2; j++)
    {
 
        t=sum[j];
        sum[j]=sum[x];
        sum[x]=t;
        x--;
    }
    string st(sum);
    return BigInt(st);
}


发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。