**Example 1:**

Input: num1 = "2", num2 = "3" Output: "6"

**Example 2:**

Input: num1 = "123", num2 = "456" Output: "56088"

**First, we shall look how we do normal multiplication:**

If we try to multiply integer **num_1 = “1 2 3”** with **num_2 = “4 5 6”**, below are the steps we follow:

**Step 1:** Starting from the right-hand side of num_2, take a single digit and multiply with all the digits of num_1.

**Step 2:** When we go to the second digit of num_2, we leave a single space on the right side of the result. Similarly, we do it for the 3^{rd} digit, we leave 2 space on the right side.

**Step 3:** Then we add all the numbers to get the final result.

**Note:** While multiplying, there is a possibility of number getting a carry, then we need to carry it to the next digit.

The above 3 steps can be visualized as shown below:

Multiply by 6 first:

Multiply by 5:

Multiply by 4:

Sum the total result:

Now we have covered the basic, how do we achieve it programmatically?

Consider the below image, we are trying to get the result of “1 2 3 [in green]” * “4 5 [in blue]”.

From the image below, we can conclude that

`num_1[i] * num_2[j]` will be placed at indices `[i + j`, `i + j + 1]`

## Hence we can write it up programmatically in C++ as shown below:

/* * File : multiply_strings.cpp */ #include<iostream> using namespace std; string multiply_strings(string num_1, string num_2) { int len_1 = num_1.length(); int len_2 = num_2.length(); //create space to store the result and fill it with zero's string final_result(len_1 + len_2, '0'); //reverse both number 1 and number 2, bacause we calcuate it from reverse reverse(num_1.begin(), num_1.end()); reverse(num_2.begin(), num_2.end()); //we use 2 loops because, we have to multiply 2 numbers for (int i = 0; i < len_1; i++) { for (int j = 0; j < len_2; j++) { int tmp_result = (final_result[i + j] - '0') + (num_1[i] - '0') * (num_2[j] - '0'); // we use num_1[i] - '0' as it will give the integer value of that number final_result[i + j] = '0' + tmp_result % 10; final_result[i + j + 1] += tmp_result / 10; } } for (int i = len_1 + len_2 - 1; i > 0 && final_result[i] == '0'; i--) final_result.pop_back(); reverse(final_result.begin(), final_result.end()); return final_result; } int main() { string num_1 = "123"; string num_2 = "456"; string result = multiply_strings(num_1, num_2); cout << "The result of "<<num_1 <<" * "<<num_2 <<" is = "<<result<<endl; return 0; }

**Output:**

The result of 123 * 456 is = 56088

This problem can also be solved using grid multiplication. If anyone can write the solution for that, it will be useful. I shall provide the solution for that soon.