#include<bits/stdc++.h>
#include <iostream>
using namespace std;
class BigInt {
public:
BigInt();
BigInt(string x);
BigInt(int x);
friend bool operator==(BigInt& b, BigInt& c) {
if (b.isNegative == true && c.isNegative == true ||
b.isNegative == false && c.isNegative == false) {
string str1 = c.data;
string str2 = b.data;
if (strcmp(str1.c_str(),str2.c_str()) == 0)
return true;
}
return false;
}
friend ostream& operator<< (ostream& out, const BigInt& right) {
out << right.data;
return out;
}
private:
string data;
bool isNegative;
};
BigInt::BigInt() {
data = '0';
isNegative = false;
}
BigInt::BigInt(int x) {
if (x < 0) {
isNegative = true;
}
if (x > 0) {
isNegative = false;
}
string str = to_string(x);
if (str[0] == '-')
str.erase(str.begin());
data = str;
}
BigInt::BigInt(string x) {
int i = 0;
string str;
vector <string> v;
while (x[i]) {
if (isspace(x[i])) {
i++;
}
if (x[i] == '-') {
isNegative = true;
}
if (x[i] != '-') {
isNegative = false;
}
if (isdigit(x[i]) || x[i] == '-' || x[i] == '+') {
for (x[i]; isdigit(x[i]) || x[i] == '-'; i++) {
str = str + x[i];
}
}
if (x[i] != '+' || x[i] != '-' || !isdigit(x[i])) {
break;
}
}
data = str;
}
int main() {
BigInt x, y, z;
x = BigInt(4004);
cout << x << endl;
y = BigInt("4004 and more stuff");
cout << y << endl;
if ( x == y)
cout << "true" << endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQmlnSW50IHsKcHVibGljOgoJQmlnSW50KCk7CglCaWdJbnQoc3RyaW5nIHgpOwoJQmlnSW50KGludCB4KTsKICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oQmlnSW50JiBiLCBCaWdJbnQmIGMpIHsKCQlpZiAoYi5pc05lZ2F0aXZlID09IHRydWUgJiYgYy5pc05lZ2F0aXZlID09IHRydWUgfHwgCgkJCWIuaXNOZWdhdGl2ZSA9PSBmYWxzZSAmJiBjLmlzTmVnYXRpdmUgPT0gZmFsc2UpIHsKCQkJc3RyaW5nIHN0cjEgPSBjLmRhdGE7CgkJCXN0cmluZyBzdHIyID0gYi5kYXRhOyAKCQkJCWlmIChzdHJjbXAoc3RyMS5jX3N0cigpLHN0cjIuY19zdHIoKSkgPT0gMCkKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQl9CgkJCXJldHVybiBmYWxzZTsgCgkJCX0KCQoJZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwgKG9zdHJlYW0mIG91dCwgY29uc3QgQmlnSW50JiByaWdodCkgewoJCW91dCA8PCByaWdodC5kYXRhOwoJCXJldHVybiBvdXQ7Cgl9CnByaXZhdGU6CglzdHJpbmcgZGF0YTsKCWJvb2wgaXNOZWdhdGl2ZTsKfTsKCkJpZ0ludDo6QmlnSW50KCkgewoJZGF0YSA9ICcwJzsKCWlzTmVnYXRpdmUgPSBmYWxzZTsKfQoKQmlnSW50OjpCaWdJbnQoaW50IHgpIHsKCWlmICh4IDwgMCkgewoJCWlzTmVnYXRpdmUgPSB0cnVlOwoJfQoJaWYgKHggPiAwKSB7CgkgaXNOZWdhdGl2ZSA9IGZhbHNlOwoJfQogICAgc3RyaW5nIHN0ciA9IHRvX3N0cmluZyh4KTsKCWlmIChzdHJbMF0gPT0gJy0nKQoJCXN0ci5lcmFzZShzdHIuYmVnaW4oKSk7CglkYXRhID0gc3RyOwp9CgpCaWdJbnQ6OkJpZ0ludChzdHJpbmcgeCkgewoJaW50IGkgPSAwOwoJc3RyaW5nIHN0cjsKCXZlY3RvciA8c3RyaW5nPiB2OwoJd2hpbGUgKHhbaV0pIHsKCQlpZiAoaXNzcGFjZSh4W2ldKSkgewoJCQlpKys7CgkJfQoJCWlmICh4W2ldID09ICctJykgewoJCQlpc05lZ2F0aXZlID0gdHJ1ZTsKCQl9CgkJaWYgKHhbaV0gIT0gJy0nKSB7CgkJCWlzTmVnYXRpdmUgPSBmYWxzZTsKCQl9CgkJaWYgKGlzZGlnaXQoeFtpXSkgfHwgeFtpXSA9PSAnLScgfHwgeFtpXSA9PSAnKycpIHsKCQkJZm9yICh4W2ldOyBpc2RpZ2l0KHhbaV0pIHx8IHhbaV0gPT0gJy0nOyBpKyspIHsKCQkJCXN0ciA9IHN0ciArIHhbaV07CgkJCX0KCQl9CgkJaWYgKHhbaV0gIT0gJysnIHx8IHhbaV0gIT0gJy0nIHx8ICFpc2RpZ2l0KHhbaV0pKSB7CgkJCWJyZWFrOwoJCQl9CgoJCX0KCQlkYXRhID0gc3RyOyAKCQkKCX0KCmludCBtYWluKCkgewoJQmlnSW50IHgsIHksIHo7Cgl4ID0gQmlnSW50KDQwMDQpOwoJY291dCA8PCB4IDw8IGVuZGw7Cgl5ID0gQmlnSW50KCI0MDA0IGFuZCBtb3JlIHN0dWZmIik7Cgljb3V0IDw8IHkgPDwgZW5kbDsKCWlmICggeCA9PSB5KQoJY291dCA8PCAidHJ1ZSIgPDwgZW5kbDsgCn0=