Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // C++ program to multiply two numbers represented
- // as strings.
- #include<bits/stdc++.h>
- using namespace std;
- // Multiplies str1 and str2, and prints result.
- string multiply(string num1, string num2)
- {
- int n1 = num1.size();
- int n2 = num2.size();
- if (n1 == 0 || n2 == 0)
- return "0";
- // will keep the result number in vector
- // in reverse order
- vector<int> result(n1 + n2, 0);
- // Below two indexes are used to find positions
- // in result.
- int i_n1 = 0;
- int i_n2 = 0;
- // Go from right to left in num1
- for (int i=n1-1; i>=0; i--)
- {
- int carry = 0;
- int n1 = num1[i] - '0';
- // To shift position to left after every
- // multiplication of a digit in num2
- i_n2 = 0;
- // Go from right to left in num2
- for (int j=n2-1; j>=0; j--)
- {
- // Take current digit of second number
- int n2 = num2[j] - '0';
- // Multiply with current digit of first number
- // and add result to previously stored result
- // at current position.
- int sum = n1*n2 + result[i_n1 + i_n2] + carry;
- // Carry for next iteration
- carry = sum/10;
- // Store result
- result[i_n1 + i_n2] = sum % 10;
- i_n2++;
- }
- // store carry in next cell
- if (carry > 0)
- result[i_n1 + i_n2] += carry;
- // To shift position to left after every
- // multiplication of a digit in num1.
- i_n1++;
- }
- // ignore '0's from the right
- int i = result.size() - 1;
- while (i>=0 && result[i] == 0)
- i--;
- // If all were '0's - means either both or
- // one of num1 or num2 were '0'
- if (i == -1)
- return "0";
- // generate the result string
- string s = "";
- while (i >= 0)
- s += std::to_string(result[i--]);
- return s;
- }
- // Driver code
- int main()
- {
- string str1 = "1235421415454545454545454544";
- string str2 = "1714546546546545454544548544544545";
- cout << multiply(str1, str2);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement