Skip to content

Commit ccadca1

Browse files
committed
another implementation
1 parent 1a64b36 commit ccadca1

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

‎algorithms/cpp/multiplyStrings/multiplyStrings.cpp

+63
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,69 @@ string multiply(string num1, string num2) {
7171
}
7272

7373

74+
/**********************************************************************************
75+
* Another implementation
76+
**********************************************************************************/
77+
78+
class Solution {
79+
public:
80+
81+
string strPlus(string& num1, string& num2) {
82+
if (num1.size()==0) return num2;
83+
if (num2.size()==0) return num1;
84+
85+
if ( num1.size() < num2.size() ) {
86+
swap(num1, num2);
87+
}
88+
89+
string s;
90+
int carry=0;
91+
int x;
92+
for (int i=num1.size()-1, j=num2.size()-1; i>=0; i--, j--) {
93+
x = num1[i]-'0' + carry;
94+
if(j>=0){
95+
x += num2[j]-'0';
96+
}
97+
s.insert(s.begin(), x%10+'0');
98+
carry = x/10;
99+
}
100+
if (carry>0) {
101+
s.insert(s.begin(), carry+'0');
102+
}
103+
104+
return s;
105+
}
106+
107+
108+
string multiply(string num1, string num2) {
109+
110+
if (num1.size()<=0 || num2.size()<=0) return "";
111+
112+
string result;
113+
for ( int i=num1.size()-1; i>=0; i--) {
114+
int carry = 0;
115+
string val;
116+
for( int j=num2.size()-1; j>=0; j--) {
117+
int v = (num2[j]-'0') * (num1[i]-'0') + carry;
118+
val.insert(val.begin(), v%10+'0');
119+
carry = v/10;
120+
}
121+
if (carry) val.insert(val.begin(), carry+'0');
122+
for (unsigned int j=i; j<num1.size()-1; j++) {
123+
val.push_back('0');
124+
}
125+
result = strPlus(result, val);
126+
}
127+
128+
//check if it is zero
129+
if (result[0]=='0') return "0";
130+
return result;
131+
132+
}
133+
};
134+
135+
136+
74137
int main(int argc, char**argv)
75138
{
76139
string s1="20";

0 commit comments

Comments
 (0)