#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <string>
using std::string;
using std::ostream;
using std::cout;
using std::cin;
using std::endl;
const int MAX = 220;
//#define online
class CHugeInt
{
private:
bool positive;
char s[MAX];
/**
/* 计算大小关系,使得交换顺序来便于计算
****/
int Compare(const CHugeInt & c) const// < -1, == 0, > 1
{
int L1 = strlen(s);
int L2 = strlen(c.s);
if(L1 < L2)
return -1;
if(L1 > L2)
return 1;
// L1 == L2
for(int i = 0; i < L1; i++)
{
if(s[i] < c.s[i])
return -1;
if(s[i] > c.s[i])
return 1;
}
return 0;
}
/***
/* 私有成员函数,专门计算 a + b,且满足a > b;
***/
CHugeInt Add(const CHugeInt &a, const CHugeInt & b) const
{
CHugeInt tp(a);
tp.positive = true;
int L1 = strlen(tp.s);
int L2 = strlen(b.s);
int Forward = 0;
for(int i = L1-1, j = L2 - 1; i>=0; --i, --j)
{
int _n1 = tp.s[i] - '0';
int _n2 = 0;
if(j >= 0)
_n2 = b.s[j] - '0';
int n = _n1 + _n2 + Forward;
Forward = 0;
if(n>=10)
{
Forward = 1;
n -= 10;
}
tp.s[i] = n + '0';
}
if(Forward == 1)
{
for(int i = L1; i >=0 ; --i)
tp.s[i+1] = tp.s[i];
tp.s[0] = '1';
}
return tp;
}
/***
/*专门计算 a - b的私有成员函数,且满足a >= b; 计算结果符号始终为正
****/
CHugeInt Sub(const CHugeInt & a, const CHugeInt & b) const
{
CHugeInt tp(a);
int L1 = strlen(tp.s);
int L2 = strlen(b.s);
int Forward = 0;
for(int i = L1 - 1, j = L2 - 1; i>=0; i--,j--)
{
int _n1 = tp.s[i] - '0';
int _n2 = 0;
if(j >= 0) _n2 = b.s[j] - '0';
int n = _n1 - _n2 - Forward;
Forward = 0;
if(n < 0)
{
Forward = 1;
n += 10;
}
tp.s[i] = n + '0';
}
/**
去掉大整数前面的首0,通过搬运数字
**/
if(tp.s[0] != '0')
return tp;
int non_zero_index = -1;// ȫΪ0
for(int i = 0; i < L1; i++)
{
if(tp.s[i] != '0')
{
non_zero_index = i;
break;
}
}
if(non_zero_index == -1)
{
tp.s[1] = '