LeetCode题解之Multiply Strings

1、题目描述

2、问题分析

按照手算乘法的过程进行计算,首先计算乘法,然后计算加法。

3、代码

  1 string multiply(string num1, string num2) {
  2         string small ;
  3         string big;
  4         if( num1.size() < num2.size() ){
  5             small = num1;
  6             big = num2;
  7         }else if( num2.size() < num1.size() ){
  8             small = num2;
  9             big = num1;
 10         }else{
 11             small = num1;
 12             big = num2;
 13         }
 14         
 15         int n = small.size() ;
 16         vector<string> re;
 17         
 18         string::reverse_iterator it_s = small.rbegin() ;
 19         while( it_s != small.rend() ){
 20             string  s;
 21             int up = 0;
 22             string::reverse_iterator it_b = big.rbegin() ;
 23             while( it_b != big.rend() ){
 24                 int m = (*it_s - '0') * (*it_b - '0') + up;
 25                 if(  m < 10 ){
 26                     s = std::to_string(m) + s;
 27                     up = 0;
 28                 }else{
 29                     s = std::to_string( m%10 )  + s;
 30                     up = m/10;
 31                 }
 32                 ++it_b;
 33             }
 34             if( up != 0 ){
 35                 s = std::to_string( up ) + s;
 36             }
 37             re.push_back( s );
 38             ++it_s;
 39         }
 40         
 41         string zero;
 42         for( vector<string>::iterator it = re.begin() ; it != re.end() ; it++ ){
 43             *it += zero;
 44             zero += "0";
 45         }
 46         
 47         string result = "0" ;
 48         for( int i = 0 ; i < re.size() ; i++ ){
 49             result = binaryAdd( result , re[i] );
 50         }
 51         
 52         int q = 0;
 53         for( string::iterator it = result.begin() ; it != result.end() ; ++it ){
 54             q += (*it - '0');
 55         }
 56         if( q == 0)
 57             result = "0";
 58         return result;
 59         
 60         
 61     }
 62     
 63     string binaryAdd( string s1 , string s2 ){
 64         string s;
 65         string::reverse_iterator it1 = s1.rbegin();
 66         string::reverse_iterator it2 = s2.rbegin();
 67         int up = 0;
 68         while( it1 != s1.rend() && it2 != s2.rend() ){
 69             int a = (*it1 - '0') + (*it2 - '0') + up;
 70             if( a < 10 ){
 71                 s  = std::to_string(a) + s;
 72                 up = 0;
 73             }else{
 74                 s = std::to_string( a - 10 ) + s;
 75                 up = 1;
 76             }
 77             ++it1 ;
 78             ++it2 ;
 79         }
 80         
 81         while( it1 != s1.rend() ){
 82             if( *it1 - '0' + up < 10 ){
 83                 s = std::to_string( *it1 - '0' + up ) + s;
 84                 up = 0;
 85             }else{
 86                 s = std::to_string( *it1 - '0' + up - 10 ) + s;
 87                 up = 1;
 88             }
 89             ++it1;
 90         }
 91         
 92         while( it2 != s2.rend() ){
 93             if( *it2 - '0' + up < 10 ){
 94                 s = std::to_string( *it2 - '0' + up ) + s;
 95                 up = 0;
 96             }else{
 97                 s = std::to_string( *it2 - '0' + up -10  ) + s;
 98                 up = 1;
 99             }
100             ++it2;
101         }
102         
103         if( up == 1){
104             s = std::to_string(1) + s;
105         }
106         return s;
107     }

猜你喜欢

转载自www.cnblogs.com/wangxiaoyong/p/9298517.html
今日推荐