#include <iostream>
#include <cstring>
using namespace std;
const int MAXLEN = 200;
//大整数减法
int Substract(int MaxLen, int *a1, int *a2)
{
int nHighestPos = 0;
for(int i = 0; i < MaxLen; ++i)
{
a1[i] -= a2[i];
if(a1[i] < 0)//判断是否需要借位
{
a1[i] += 10;
a1[i + 1]--;
}
if(a1[i] > 0)
nHighestPos = i;
}
return nHighestPos;
}
//求最大值
int Max(int x, int y)
{
return ((x > y) ? x : y);
}
int main()
{
//标志应该谁是被减数,从而确定顺序
int n;//要输入的组数
cin >> n;
while(n--)
{
char *s1 = new char[MAXLEN + 10]();//每次循环开始动态分配,结束动态释放内存,可以防止加减交替运算时造成的内存错误
char *s2 = new char[MAXLEN + 10]();
int *a1 = new int[MAXLEN + 10]();
int *a2 = new int[MAXLEN + 10]();
int Flag = 0;
cin >> s1;
cin >> s2;
int nLen1 = strlen(s1);
for(int i = nLen1 - 1, j = 0; 0 <= i; --i)
{
a1[j++] = s1[i] - '0';
}
int nLen2 = strlen(s2);
for(int i = nLen2 - 1, j = 0; 0 <= i; --i)
{
a2[j++] = s2[i] - '0';
}
int MaxLen = Max(nLen1, nLen2);
//
if(nLen1 == nLen2)
{
for(int i = 0; i < nLen1; ++i)
{
if(s1[i] > s2[i])
{
Flag = 1;
break;
}else if(s2[i] > s1[i])
{
Flag = 2;
break;
}
}
}
//
if(Flag == 1 || nLen1 > nLen2)
{
int Pos = Substract(MaxLen, a1, a2);
for(int i = Pos; 0 <= i; --i)
cout << a1[i];
cout << endl;
}else if(Flag == 2 || nLen2 > nLen1)
{
int Pos = Substract(MaxLen, a2, a1);
for(int i = Pos; 0 <= i; --i)
{
if(i == Pos)
cout << -a2[i];
else
cout << a2[i];
}
cout << endl;
}else
cout << 0 << endl;
delete [] s1;
delete [] s2;
delete [] a1;
delete [] a2;
}
return 0;
}
大整数减法
最新推荐文章于 2020-12-25 23:01:11 发布