Pagini recente » Cod sursa (job #2153190) | Cod sursa (job #939914) | Borderou de evaluare (job #1036961) | Cod sursa (job #2964381) | Cod sursa (job #1855729)
#include <iostream>
#include <fstream>
#define DigitMax 40
using namespace std;
ifstream fin("adunare.in");
ofstream fout("adunare.out");
string buffer;
string::iterator buffer_it;
int read_int( ) {
while ( *buffer_it<'0' || *buffer_it>'9' ) {
++buffer_it;
}
int x = 0;
while ( *buffer_it>='0' && *buffer_it<='9' ) {
x = x*10+*buffer_it-'0';
++buffer_it;
}
return x;
}
class Huge {
public:
long long V[1 + DigitMax];
inline Huge () {
for(long long i = 0; i < DigitMax; ++i)
V[i] = 0;
}
inline Huge (long long X) {
*this = X;
}
inline Huge operator= (long long X) {
for(long long i = 0; i < DigitMax; ++i)
V[i] = 0;
for(; X; X /= 10)
V[++V[0]] = X % 10;
return *this;
}
inline Huge operator= (Huge X) {
for(long long i = 0; i < DigitMax; ++i)
V[i] = X.V[i];
return *this;
}
friend Huge operator+ (Huge V,Huge X) {
long long i, T = 0;
Huge Now;
for(i = 1; i <= V.V[0] || i <= X.V[0] || T; i++, T /= 10)
Now.V[i] = (T += V.V[i] + X.V[i]) % 10;
Now.V[0] = i - 1;
return Now;
}
friend Huge operator+ (Huge A,long long X) {
return A + Huge(X);
}
friend Huge operator* (Huge V,Huge X) {
Huge Now;
long long i, j, T = 0;
for(i = 1; i <= V.V[0]; i ++) {
for(j = 1, T = 0; j <= X.V[0] || T; j ++, T /= 10)
Now.V[i + j - 1] = (T += Now.V[i + j - 1] + V.V[i] * X.V[j]) % 10;
if(i + j - 2 >= Now.V[0]) Now.V[0] = i + j - 2;
}
return Now;
}
friend Huge operator* (Huge A,long long X) {
return A * Huge(X);
}
friend Huge operator- (Huge A,Huge X) {
long long i, T = 0;
Huge Now = A;
for(i = 1; i <= Now.V[0]; i ++) {
Now.V[i] -= (i <= X.V[0] ? X.V[i] : 0) + T;
Now.V[i] += (T = Now.V[i] < 0) * 10;
}
for(; Now.V[0] > 1 && !Now.V[Now.V[0]]; Now.V[0] --);
return Now;
}
friend Huge operator- (Huge A,long long X) {
return A - Huge(X);
}
friend Huge operator/ (Huge A,long long X) {
long long i, T = 0;
Huge Now = A;
for(i = Now.V[0]; i; i--, T %= X)
Now.V[i] = (T = T * 10 + Now.V[i]) / X;
for(; Now.V[0] > 1 && Now.V[Now.V[0]] == 0; Now.V[0] --);
return Now;
}
friend long long operator% (Huge A,long long X) {
long long i, T = 0;
for(i = A.V[0]; i; i--)
T = (T * 10 + A.V[i]) % X;
return T;
}
friend bool operator< (Huge X,Huge Y) {
long long i,n = X.V[0],m = Y.V[0];
if(n < m) return true;
if(m > n) return false;
for(i = n; i && X.V[i] == Y.V[i]; --i);
if(i==0) return false;
if(X.V[i] < Y.V[i]) return true;
return false;
}
friend bool operator<= (Huge X,Huge Y) {
long long i,n = X.V[0],m = Y.V[0];
if(n < m) return true;
if(m > n) return false;
for(i = n; i && X.V[i] == Y.V[i]; --i);
if(i==0) return true;
if(X.V[i] < Y.V[i]) return true;
return false;
}
friend ostream & operator<<(ostream &out, Huge X) {
for(long long i = X.V[0]; i>0; i--)
out<<X.V[i];
return out;
}
};
int main() {
Huge a,b;
getline(fin, buffer, (char)0);
buffer_it = buffer.begin();
a = read_int();
b = read_int();
fout << a + b;
return 0;
}