#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
#define N 200
//反转字符串
string res(string s)
{
int i = 0;
int j = s.length() - 1;
while (i < j)
{
swap(s[i], s[j]);
i++;
j--;
}
return s;
}
//转换字符串为int数组
int pub(string s1, string s2, int a[], int b[])
{
s1 = res(s1);
s2 = res(s2);
int len1 = s1.length();
int len2 = s2.length();
int i, maxlen;
maxlen = (len1 > len2) ? len1 : len2;
for (i = 0; i < len1; i++)
{
a[i] = s1[i] - '0';
}
for (i = 0; i < len2; i++)
{
b[i] = s2[i] - '0';
}
return maxlen;
}
//加法运算
void add(string s1, string s2)
{
int a[N] = {0}, b[N] = {0}, c[N] = {0};
int i, maxlen;
maxlen = pub(s1, s2, a, b);
for (i = 0; i < maxlen; i++)
{
c[i] = a[i] + b[i];
}
for (i = 0; i < maxlen; i++)
{
if (c[i] >= 10)
{
c[i] = c[i] - 10;
c[i + 1]++;
if (maxlen - 1 == i)
{
maxlen++;
}
}
}
for (i = maxlen - 1; i >= 0; i--)
{
cout << c[i];
}
cout << endl;
}
//减法运算
void sub(string s1, string s2)
{
int a[N] = {0}, b[N] = {0}, c[N] = {0};
int i, maxlen, resultlen = -1;
bool aSmall = false;
//两数相等直接输出0
if (s1.compare(s2) == 0)
{
cout << 0 << endl;
return;
}
int len1 = s1.length();
int len2 = s2.length();
if (len1 == len2)
{
aSmall = s1 < s2;
}
else
{
aSmall = len1 < len2;
}
maxlen = pub(s1, s2, a, b);
if (aSmall)
{
cout << '-';
for (i = 0; i < maxlen; i++)
{
c[i] = b[i] - a[i];
}
}
else
{
for (i = 0; i < maxlen; i++)
{
c[i] = a[i] - b[i];
}
}
for (i = 0; i < maxlen; i++)
{
if (c[i] < 0)
{
c[i] = c[i] + 10;
c[i + 1]--;
if (maxlen - 1 == i)
{
maxlen++;
}
}
}
/////////////////////////
//去掉结果前的0
for (i = maxlen; i > 0; i--)
{
if (c[i] != 0)
break;
else if (c[i] == 0)
{
resultlen = i - 1;
}
}
if (resultlen > 0)
{
maxlen = resultlen;
}
else
{
maxlen = 0;
}
////////////////////////
for (i = maxlen; i >= 0; i--)
{
cout << c[i];
}
cout << endl;
}
int main()
{
string s1, s2;
char ch;
do
{
cout << "输入2个正整数:\n";
cin >> s1 >> s2;
if (!isdigit(s1[0]) || !isdigit(s2[0]))
break;
cout << "\n输入操作符(+或者-):";
cin >> ch;
switch (ch)
{
case '+':
add(s1, s2);
break;
case '-':
sub(s1, s2);
break;
}
cout << endl;
} while (true);
system("pause");
return 0;
}