/*
加法减法都已经设计好了,符合题目要求,但是
输入样例:
3333333333333333333333333333333333
-2222222222222222222222222222222222
输出样例:
1111111111111111111111111111111111
*/
#include
#include
#include
using namespace std;
const int maxn = 100;
class Largeint;
Largeint sum(Largeint b,Largeint a);
Largeint dash(Largeint b,Largeint a);
class Largeint{
private :
int num[100];
public:
bool positive=true;
int &operator [](int i);
Largeint(char str[]);
Largeint();
Largeint(Largeint &b);
void print();
};
Largeint operator+( Largeint b, Largeint a){
Largeint result;
if(b.positive&&a.positive){result=sum(b,a);}
else if(!b.positive&&!a.positive){result=sum(a,b);result.positive=false;}
else if(b.positive&&!a.positive){result=dash(b,a);}
else if(!b.positive&&a.positive){result=dash(a,b);}
return result;
}
Largeint operator-( Largeint b, Largeint a){
Largeint result;
if(b.positive&&a.positive){result=dash(b,a);}
else if(!b.positive&&!a.positive){result=dash(a,b);}
else if(b.positive&&!a.positive){result=sum(b,a);}
else if(!b.positive&&a.positive){result=sum(b,a);result.positive=false;}
return result;
}
int & Largeint:: operator [](int i){
return num[i];
}
Largeint::Largeint(){
memset(num, 0, sizeof(num));
positive=true;
}
Largeint::Largeint(char str[]){
memset(num, 0, sizeof(num));
if(str[0]!='-')
{
for(int i = strlen(str) - 1, j = 0; i >= 0; i--)
num[j++] = str[i] - '0';
positive=true;
}
else
{
for(int i = strlen(str)-1 , j = 0; i >= 0; i--)
num[j++] = i?(str[i] - '0'):0;
//num[j++] = str[i] - '0';
positive=false;
}
}
void Largeint::print(){
//输出结果
if(!positive)cout<<"-";
int i;
//过滤掉前置0
for(i = maxn - 1; i >= 0 && num[i] == 0; i--);
if(i >= 0)
for( ; i >= 0; i--)
cout << num[i];
//如果保存结果的数组中全部为0,上面的操作会过滤掉所有的0,不会有输出,所以这里输出一个0
}
Largeint::Largeint(Largeint &b){
for(int i=0;i<100;i++)
num[i]=b.num[i],positive=b.positive;
}
Largeint sum(Largeint b,Largeint a)
{
Largeint result;
for(int i = 0; i < maxn; i++)
{
result[i]+=b[i] + a[i];
//进位操作
if(result[i] >= 10)
{
result[i + 1] += 1;
result[i] %= 10;
}
}
return result;
}
Largeint dash(Largeint b,Largeint a)
{
Largeint result;
for(int i = 0; i < maxn; i++)
{
result[i]=b[i] - a[i];
//进位操作
if(result[i] <0)
{ result[i]+=10;
if(i } } result.positive=true; return result; } int main() { char str1[maxn], str2[maxn]; cin >> str1 >> str2; Largeint b,a,c; b=Largeint(str1); a=Largeint(str2); c=b-a; c.print(); //c=b-a; //c.print(); return 0; }