Multiply Strings

思路很简单,将string转为int,计算完后再转为string,但要简洁的实现起来并不容易。

typedef vector<int> bigint;

      bigint make_bigint(string const& s)
      {
          //将字符串转为vector<int>
          bigint n;
          //将s中的字符转为int,以逆序存储在n中,其中back_inserter返回的是n的最后一个位置的迭代器
          //注意lambda表达式的用法
          transform(s.rbegin(), s.rend(), back_inserter(n), [](char c){return c - '0'; });
          return n;
      }
      //重载乘法运算符,双目运算,声明为友元
     friend bigint operator*(bigint const& x, bigint const& y)
      {
         bigint z(x.size() + y.size());

         for (int i = 0; i < x.size(); i++)
         {
             for (int j = 0; j < y.size(); j++)
             {
                 z[i + j] += x[i] * y[j];
                 z[i + j + 1] = z[i + j] / 10;
                 z[i + j] = z[i + j] % 10;
             }
         }

         return z;
      }

     string to_string(bigint const& n)
     {
         string str;
         transform(find_if(n.rbegin(), n.rend(), [](char c){return c > ''; }), n.rend(),
             back_inserter(str), [](char c){return c + '0'; });

         return str;
     }
      string stringmulty(string s1, string s2)
      {
          return to_string(make_bigint(s1)*make_bigint(s2));
      }
View Code
原文地址:https://www.cnblogs.com/573177885qq/p/5748117.html