字符串相加和字符串相乘

发布于:2025-03-29 ⋅ 阅读:(21) ⋅ 点赞:(0)

通过string类来实现大数相加,个位相加进十位,十位相加进百位。

通过不断相加和进位来实现大数相加。

auto end1 = int(num1.size() - 1);

  auto end2 = int(num2.size() - 1);

  string a;

  a.insert(0, 1,'0');

  int val = 0;

  int b = num1.size();

  int c = num2.size();

  int max;

  if (b > c)

  {

      max = b;

  }

 if(b<=c)

  {

     max = c;

  }

  for(int i=0;i<max;i++)

  {

      if (end1 >= 0 && end2 >= 0)

      {

           val = int(num1[end1]-'0') + int(num2[end2]-'0');

      }

       if (end1 < 0)

      {

           val =  int(num2[end2] - '0');

      }

       if  (end2 < 0)

      {

           val = int(num1[end1] - '0');

      }//4 3

      int wei = val % 10;//4   3

      int jin = val / 10;//0   0

      a[0] =  char(wei+int(a[0]));

      if (a[0]==':')

      {

          a[0] = '0';

          a.insert(0, 1, '1');

      }

      else

      {

          a.insert(0, 1, char(jin + int('0')));

      }

      end1--;

      end2--;

  }

  if (a[0] == '0')

  {

      a.erase(a.begin(), a.begin() + 1);

  }

  cout << a;

  return a;

本题是通过先计算长数与短数的分别相乘来实现,如果相等的话就一样进行。

然后利用相加进行即可,低位要补0。

class Solution {

public:

 string addStrings(string &num1, string &num2) {

     int end1 = num1.size()-1;

 int end2 = num2.size()-1;

 if (end1 < end2)

 {

     swap(num1, num2);

     swap(end1, end2);

 }

 int min = std::min(num1.size(), num2.size());

 int max = std::max(num1.size(), num2.size());

 string a;

 string b;

 b.insert(0, 1, '0');

  if(num1[0]=='0'||num2[0]=='0')

    {

        return b;

    }

 for (int j = 0; j < min; j++)

 {

     a.clear();

     a.insert(0, 1, '0');

     for (int k = 0; k < j; k++)

     {

         a.push_back('0');

     }

     end1 = num1.size() - 1;

       for (int i = 0; i < max; i++)

     {

         int val = int(num1[end1] - '0') * int(num2[end2] - '0');

         int wei = val % 10;

         int jin = val / 10;

         a[0] = char(wei + a[0]);

         if (a[0] >= ':')

 {

     char tmp = 0;

     tmp = a[0];

     a[0] = char(tmp - ':'+'0');

     a.insert(0, 1, '1');

     a[0] = char(jin + a[0]);

 }

         else

         {

             a.insert(0, 1, char(jin + '0'));

         }

         end1--;

     }

       if (a[0] == '0')

       {

           a.erase(a.begin(), a.begin() + 1);

       }

       b = addStrings(a, b);

       end2--;

 }

 return b;

}

};