111
2023-10-13 16:56:16
发布于:浙江
#include <bits/stdc++.h>
using namespace std; //template operator
class lll{
private:
int a[1000000];
int len;
bool f=0;
friend lll add(const lll a,const lll b){
lll c;
int len = max(a.len,b.len);
c.a[0] = 0;
for(int i = 0;i <= len;i++){
c.a[i] = a.a[i] + b.a[i] + c.a[i];
c.a[i+1] += c.a[i] / 10;
c.a[i] %= 10;
}
if(c.a[len+1])len++;
c.len = len;
return c;
}
friend lll __reduce(const lll a,const lll b){
lll c;
int len = max(a.len,b.len);
for(int i = 0;i <= len;i++){
c[i] = a[i] - b[i];
if(c[i] < 0){
c[i+1]--;
c[i]+=10;
}
}
return c;
}
friend lll reduce(const lll a,const lll b){
lll c;
if(gt(b,a)){
c = __reduce(b,a);
c.f = 1;
}
}
friend bool gt(const lll a,const lll b){ //大于
if(a.len > b.len)return true;
if(b.len > a.len)return false;
for(int i = a.len;i>=0;i--) {
if(a.a[i] < b.a[i])return false;
}
return true;
}
public:
int& operator[](const int n){
return this->a[n];
}
const int& operator[](const int n) const{
return this->a[n];
}
friend istream& operator >>(istream &input,lll &a){
string arr;
input >> arr;
int len = arr.length() - 1;
if(arr[0] == '-'){
len--;
a.f = true;
}
a.len = len;
for(int i = 0;i <= len;i++){
a.a[len - i] = arr[i] - '0';
}
return input;
}
friend ostream& operator <<(ostream &output,const lll a){
if(a.f)output << '-';
for(int i = a.len;i >= 0;i--){
output << a.a[i];
}
return output;
}
friend lll operator +(const lll a,const lll b){
if((b.len < 1 || b.f == 1) && (a.len > 0 || a.f == 0)){
return reduce(a,b);
}
return add(a,b);
}
friend lll operator -(const lll a,const lll b){
}
friend bool operator >(const lll a,const lll b){
if(a.f == 0&&b.f == 1){
return true;
}else{
return false;
}
if(a.f == 1&&b.f == 1){
return !gt(a,b);
}
return gt(a,b);
}
};
lll a,b;
int main(){
cin >> a >> b;
cout << a + b;
return 0;
}
全部评论 1
hi,发题解请附带原题以及解题思路哦
2023-10-13 来自 浙江
0
有帮助,赞一个