LeetCode---Multiply Strings

来源:互联网 发布:mysql 存储过程 丢失 编辑:程序博客网 时间:2024/04/28 00:17

题目大意:给出两个字符串表示的数求出其乘法结果。

算法思想:

1.设置两个变量分别存储当前结果和累加结果。

2.利用两个循环,外层循环控制被乘数内层循环控制乘数,然后将被乘数的每一位分别和乘数的所有位相乘得到当前结果并将其扩大10倍和累加结果相加并存入累加结果中。

3.返回计算结果。

代码如下:

class Solution {public:    string multiply(string num1, string num2) {          string preres,curres;  if(num1.length()==0||num2.length()==0) return preres;  int c=0;  for(int i=num2.length()-1;i>=0;--i){      for(int j=num1.length()-1;j>=0;--j){  int tmp=(num1[j]-'0')*(num2[i]-'0')+c;  curres+=(tmp%10+'0');  c=tmp/10;  }  if(c) {    curres+=c+'0';    c=0;  }  if(preres.length()==0)     preres=curres;  else{  string a=preres,b=curres;  reverse(a.begin(),a.end());  reverse(b.begin(),b.end());  preres=add(a,b);      }  curres.clear();  curres.append(num2.length()-i,'0');   }    reverse(preres.begin(),preres.end());    if(count(preres.begin(),preres.end(),'0')==preres.length())      return "0";  return preres;     }     string add(string a, string b) {          if(a.length()==0) return b;          if(b.length()==0) return a;          string res("");          reverse(a.begin(),a.end());          reverse(b.begin(),b.end());          int d=0,tmp=0,i;          int size=min(a.size(),b.size());          for(i=0;i<size;++i){              tmp=(a[i]-'0')+(b[i]-'0')+d;              res+=(tmp%10+'0');              d=tmp/10;          }          if(i<a.size()){              while(i<a.size()){                  tmp=(a[i]-'0')+d;                  res+=(tmp%10+'0');                  d=tmp/10;                  ++i;              }          }          if(i<b.size()){              while(i<b.size()){                  tmp=(b[i]-'0')+d;                  res+=(tmp%10+'0');                  d=tmp/10;                  ++i;              }          }          if(d){              res+=(d+'0');          }          return res;      }  };


0 0