C++程序设计练习题 大数加减法

/*

加法减法都已经设计好了,符合题目要求,但是

输入样例:

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;

}

你可能感兴趣的:(C++程序设计练习题 大数加减法)