50分,108行求改
查看原帖
50分,108行求改
1007886
Voltaris楼主2024/7/18 10:03

50分108行求改

#include<bits/stdc++.h>
using namespace std;
class Bigint;

istream& operator>>(istream& is, Bigint& bigint);
ostream& operator<<(ostream& os, const Bigint& bigint);

class Bigint {
private:
    string value;

public:
    Bigint(const string& str) : value(str) {}

    friend istream& operator>>(istream& is, Bigint& bigint);
    friend ostream& operator<<(ostream& os, const Bigint& bigint);

    Bigint operator+(const Bigint& other) const {
        string result;
        string str1 = value;
        string str2 = other.value;
        
        int len1 = str1.length();
        int len2 = str2.length();
        int carry = 0;
        
        if (len1 > len2) {
            str2 = std::string(len1 - len2, '0') + str2;
        } else {
            str1 = std::string(len2 - len1, '0') + str1;
        }
        
        for (int i = str1.length() - 1; i >= 0; i--) {
            int sum = (str1[i] - '0') + (str2[i] - '0') + carry;
            
            result.insert(result.begin(), (sum % 10) + '0');
            carry = sum / 10;
        }
        
        if (carry > 0) {
            result.insert(result.begin(), carry + '0');
        }
        
        return Bigint(result);
    }

    Bigint operator-(const Bigint& other) const {
        string result;
        string str1 = value;
        string str2 = other.value;

        int len1 = str1.length();
        int len2 = str2.length();
        int borrow = 0;

        if (len1 > len2) {
            str2 = string(len1 - len2, '0') + str2;
        } else {
            str1 = string(len2 - len1, '0') + str1;
        }

        for (int i = str1.length() - 1; i >= 0; i--) {
            int diff = (str1[i] - '0') - (str2[i] - '0') - borrow;

            if (diff < 0) {
                diff += 10;
                borrow = 1;
            } else {
                borrow = 0;
            }

            result.insert(result.begin(), diff + '0');
        }

        result.erase(0, std::min(result.find_first_not_of('0'), result.size() - 1));

        return Bigint(result);
    }
};
std::istream& operator>>(std::istream& is, Bigint& bigint) {
    std::string input;
    is >> input;
    bigint.value = input;
    return is;
}

std::ostream& operator<<(std::ostream& os, const Bigint& bigint) {
    os << bigint.value;
    return os;
}
string STRING_INPUT(){
	string inputs;
	string warn="Please don't enter characters other than numbers.";
	cin>>inputs;
	for(int i=0;i<inputs.length();i++){
		if(!(inputs[i]>='0'&&inputs[i]<='9')) {
			cout<<warn;
			return "";
		}
	}
	return inputs;
} 
int main(){
	Bigint a=STRING_INPUT();
	Bigint b=STRING_INPUT();
	cout<<a+b;
	return 0;
}
2024/7/18 10:03
加载中...