大佬们,求救求救

P1001 A+B Problem

Jerry555 @ 2024-02-19 21:03:13

#include <string>
#include <iostream>
using namespace std;
string removeLeadingZeros(const string& str) {
    size_t pos = str.find_first_not_of('0');
    if (pos != std::string::npos) {
        return str.substr(pos);
    }
    return "0";
}

class BigNumber {
public:
    std::string number;
    int len;
    bool empty = true;
    BigNumber() {

    }
    BigNumber(std::string NewNum) {
        number = NewNum;
        len = NewNum.length()-1;
        empty = false;
    }
    void InitIn() {
        std::cin >> number;
        len = number.length()-1;
        empty = false;
    }
    void Output() {
        std::cout << number;
    }
    void Delete() {
        empty = true;
        number = "";
        len = 0;
    }

};
BigNumber c;
BigNumber operator+(BigNumber a,BigNumber b) {
    BigNumber* p;
    if (a.empty or b.empty)throw "BigNumber_Is_Empty";
    removeLeadingZeros(a.number);
    removeLeadingZeros(b.number);
    if (a.len != b.len) {
        int temp = max(a.len, b.len) - min(a.len, b.len);
        bool ABig = a.len > b.len;
        if (!ABig)p = &a;
        else p = &b;
        for (int i = 0; i <= temp - 1;i++){
            p->number.insert(0, "0");
            p->len++;
        }
    }
    c.len=a.len+1;
    c.number.reserve(a.len+1);
    bool flag = false;
    for (int i = a.len; i >= 0; i--) {
        int te=(a.number.at(i)-'0') + (b.number.at(i)-'0') + flag + '0';
        c.number.insert(0, string(1,(a.number.at(i)-'0') + (b.number.at(i)-'0') + flag + '0'));
        flag = false;
        if (c.number[0] > '9')c.number[0] -= 10, flag = true;
    }
    if (flag)c.number.insert(0, "1");
    return c;
}

int main(){
    BigNumber a,b;
    a.InitIn();
    b.InitIn();
    BigNumber t;
    t=a+b;
    t.Output();
}

60分 AAAWWWAWAA


by cff_0102 @ 2024-02-19 21:04:44

@Jerry555 根据你的程序,-1+-1=*2


by quxiangyu @ 2024-02-19 21:30:53

@Jerry555 你用的高精度吧


by quxiangyu @ 2024-02-19 21:33:28

可以这么写,但是过不了→_→

#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
struct bign
{
    int len,s[N];
    bign()  {  memset(s,0,sizeof(s));  len=1;  }
    bign(int num)  {  *this=num; }
    bign(char *num) { *this=num; }
    bign operator =(int num)
    {
        char c[N];
        sprintf(c,"%d",num);
        *this=c;
        return *this;
    }
    bign operator =(const char *num)
    {
        len=strlen(num);
        for (int i=0;i<len;i++) s[i]=num[len-1-i]-'0';
        return *this;
    }
    string str()
    {
        string res="";
        for (int i=0;i<len;i++) res=(char)(s[i]+'0')+res;
        return res;
    }
    void clean()
    {
        while (len>1&&!s[len-1]) len--;
    }
    bign operator +(const bign &b)
    {
        bign c;    
        c.len=0;
        for (int i=0,g=0;g||i<len||i<b.len;i++)
        {
            int x=g;
            if (i<len) x+=s[i];
            if (i<b.len) x+=b.s[i];
            c.s[c.len++]=x%10;
            g=x/10;
        }
        return c;
    }
    bign operator -(const bign &b)
    {
        bign c;
        c.len=0;
        int x;     
        for (int i=0,g=0;i<len;i++)
        {
            x=s[i]-g;
            if (i<b.len) x-=b.s[i];
            if (x>=0) g=0;
            else{          
                x+=10;
                g=1;
            };
            c.s[c.len++]=x;
        }
        c.clean();
        return c;
    }
    bign operator *(const bign &b)
    {
        bign c;
        c.len=len+b.len;
        for (int i=0;i<len;i++) for (int j=0;j<b.len;j++) c.s[i+j]+=s[i]*b.s[j];
        for (int i=0;i<c.len-1;i++) { c.s[i+1]+=c.s[i]/10; c.s[i]%=10; }
        c.clean();
        return c;  
    }
    bool operator <(const bign &b)
    {
        if (len!=b.len) return len<b.len;
        for (int i=len-1;i>=0;i--)
             if (s[i]!=b.s[i]) return s[i]<b.s[i];
        return false;
    }
    bign operator +=(const bign &b)
    {
        *this=*this+b;
        return *this;
    }
    bign operator -=(const bign &b)
    {
        *this=*this-b;
        return *this;
    }  
};
istream& operator >>(istream &in,bign &x)
{
  string s;
  in>>s;
  x=s.c_str();
  return in;
}
ostream& operator <<(ostream &out,bign &x)
{
    out<<x.str();
    return out;
}
int main(){
    bign a,b,c;
    ios::sync_with_stdio(false);
    cin>>a>>b;
//    cout<<a<<endl;
//    cout<<b<<endl;
    c=a+b;
    cout<<c<<endl;
    return 0;
}

by dmx7u19x @ 2024-02-22 09:27:30

为什么你不会用a+b呢


by __youzimo2014__ @ 2024-02-25 15:23:38

@Jerry555 你把这个代码提交到这道题就应该能过。

这道题有负数哦。

#include <bits/stdc++.h>
using namespace std;int main() {int a, b;cin >> a >> b; cout << a + b << endl;return 0;}

只有两行哦

求互关 QAQ


|