当前位置: 首页 > article >正文

字符串相加和字符串相乘

通过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;

}

};


http://www.kler.cn/a/613141.html

相关文章:

  • 通过Map类和List类的List<Map<>>组合类体会JSON
  • 7. 实现命名路由和反向路由
  • windows第十八章 菜单、工具栏、状态栏
  • leetcode102 二叉树的层次遍历 递归
  • [贪心算法] 加油站 单调递增的数字 坏了的计算器 合并区间 无重叠区间
  • MUX VLAN -- PVLAN
  • 每日一题之杨辉三角
  • 雕琢健康生活,奏响养生乐章
  • 一周掌握Flutter开发--9. 与原生交互(上)
  • Jmeter触发脚本备份
  • 《白帽子讲 Web 安全》之服务端请求伪造(SSRF)深度剖析:从攻击到防御
  • Sa-Token
  • 探索高效的图像处理:SMFA 模块与 DMlp 类的实现解析
  • 《 C语言实现:金字塔式星号图案打印》
  • FALL靶机攻略
  • B/S阅片项目算法梳理
  • 蓝桥杯省模拟赛 阶乘求值
  • OMI(operating mode indication)
  • 攻破tensorflow,勇创最佳agent(1)---学习率learning_rate问题
  • Java + LangChain 实战入门,开发大语言模型应用!