#include <iostream>
#include <cstring>
using namespace std;
const int Max = 10002;
void add(string a, string b);
void sub(string a, string b);
void mul(string a, string b);
void div(string a, string b);
int delPreZero(int x[], int xLen);
bool compare(int x[], int y[], int xLen, int yLen);
int sub1(int x[], int y[], int z[], int xLen, int yLen);
void printArr(int x[], int xLen);
int main()
{
string a, b;
cin >> a >> b;
add(a, b);
sub(a, b);
mul(a, b);
div(a, b);
}
void add(string a, string b)
{
int x;
int flag = 0;
int str1[Max] = { 0 }, str2[Max] = { 0 }, str3[Max];
int n = a.size();
int m = b.size();
for (int i = 0; i < n; i++)
str1[n - 1 - i] = a[i] - '0';
for (int i = 0; i < m ; i++)
str2[m - 1 - i] = b[i] - '0';
if (n < m)
{
x = n;
n = m;
m = x;
}
for (int i = 0; i < n; i++)
{
str3[i] = (str1[i] + str2[i] + flag) % 10;
flag= (str1[i] + str2[i] + flag) / 10;
}
if (flag == 1)
{
cout << "1";
for (int i = n-1; i >=0; i--)
{
cout << str3[i];
}
}
else
for (int i = n-1; i >=0; i--)
{
cout << str3[i];
}
cout << endl;
}
void sub(string a, string b)
{
int x;
int flag = 0;
int str1[Max] = { 0 }, str2[Max] = { 0 }, str3[Max] = {0};
int n = a.size();
int m = b.size();
for (int i = 0; i < n; i++)
str1[n - 1 - i] = a[i] - '0';
for (int i = 0; i < m; i++)
str2[m - 1 - i] = b[i] - '0';
if (n > m)
x = n;
else if (n < m)
{
x = m;
flag = 1;
}
else
{
for (int i = n - 1; i >= 0; i--)
{
if (str1[i] < str2[i])
{
x = m;
flag = 1;
break;
}
else if (str1[i] > str2[i])
{
x = n;
flag = 0;
break;
}
else
flag = 2;
}
}
if (flag == 0)
{
for (int i = 0; i < x; i++)
{
str3[i] = str1[i] - str2[i];
if (str3[i] < 0)
{
str1[i + 1] -= 1;
str3[i] += 10;
}
}
int temp = 0;
for (int i = x - 1; i > 0; i--)
{
if (str3[i] == 0)
temp++;
else
break;
}
for (int i = x - temp - 1; i >= 0; i--)
cout << str3[i];
}
else if (flag == 1)
{
for (int i = 0; i < x; i++)
{
str3[i] = str2[i] - str1[i];
if (str3[i] < 0)
{
str2[i + 1] -= 1;
str3[i] += 10;
}
}
int temp = 0;
for (int i = x - 1; i > 0; i--)
{
if (str3[i] == 0)
temp++;
else
break;
}
cout << "-";
for (int i = x - temp - 1; i >= 0; i--)
cout << str3[i];
}
else
cout << "0";
cout << endl;
}
void mul(string a, string b)
{
int x;
int str1[Max] = { 0 }, str2[Max] = { 0 }, str3[Max] = { 0 };
int n = a.size();
int m = b.size();
for (int i = 0; i < n; i++)
str1[n - 1 - i] = a[i] - '0';
for (int i = 0; i < m; i++)
str2[m - 1 - i] = b[i] - '0';
for (int i = 0; i < n; i++)
{
x = i;
for (int j = 0; j < m; j++)
{
str3[x++] += str1[i] * str2[j];
}
}
for (int i = 0; i < x; i++)
{
str3[i + 1] += str3[i] / 10;
str3[i] = str3[i] % 10;
}
if (str3[x] != 0)
{
for (int i = x; i >= 0; i--)
cout << str3[i];
}
else
for (int i = x - 1; i >= 0; i--)
cout << str3[i];
cout << endl;
}
void div(string a, string b)
{
int x = 0;
int str1[Max] = { 0 }, str2[Max] = { 0 }, str3[Max] = { 0 };
int n = a.size();
int m = b.size();
int c;
for (int i = 0; i < n; i++)
str1[n - 1 - i] = a[i] - '0';
for (int i = 0; i < m; i++)
str2[m - 1 - i] = b[i] - '0';
c = n - m + 1;
while (compare(str1,str2, n, m)) {
n = sub1(str1, str2, str3, n, m);
}
if (c < 1) {
c = 1;
}
c = delPreZero(str3, c);
printArr(str3, c);
}
int delPreZero(int x[], int xLen) {
int i = xLen;
while (x[i - 1] == 0 && i > 1) {
i--;
}
return i;
}
void printArr(int x[], int xLen) {
for (int i = xLen - 1; i >= 0; i--) {
cout << x[i];
}
cout << endl;
}
bool compare(int x[], int y[], int xLen, int yLen) {
if (xLen < yLen) {
return false;
}
if (xLen == yLen) {
for (int i = xLen - 1; i >= 0; i--) {
if (x[i] > y[i]) {
return true;
}
if (x[i] < y[i]) {
return false;
}
}
return true;
}
return true;
}
int sub1(int x[], int y[], int z[], int xLen, int yLen) {
int zLoc = xLen - yLen;
for (int i = 1; i <= yLen; i++) {
if (x[xLen - i] > y[yLen - i])
break;
if (x[xLen - i] < y[yLen - i]) {
zLoc--;
break;
}
}
if (zLoc < 0)
return xLen;
for (int i = zLoc, j = 0; i < xLen && j < yLen; i++, j++) {
while (x[i] < y[j]) {
x[i + 1]--;
x[i] += 10;
}
x[i] -= y[j];
}
z[zLoc]++;
while (x[xLen - 1] == 0)
xLen--;
if (xLen <= 0)
xLen = 1;
return xLen;
}
10-23