Multiplication of large numbers (Given in string format)
class Solution
{
public:
string multiply(string num1, string num2)
{
if (num1 == "0" || num2 == "0")
return "0";
if (num1 == "1")
return num2;
if (num2 == "1")
return num1;
if (num1.size() == 1 && num2.size() == 1)
{
int x = num1[0] - '0';
int y = num2[0] - '0';
x = x * y;
return to_string(x);
}
int n = num1.size() + num2.size(), x, carry, y, z;
vector<vector<int>> vr;
int cnt = 0;
for (int i = num1.size() - 1; i >= 0; i--)
{
vector<int> v;
for (int k = 0; k < cnt; k++)
v.push_back(0);
cnt++;
x = num1[i] - '0';
carry = 0;
for (int j = num2.size() - 1; j >= 0; j--)
{
y = num2[j] - '0';
z = x * y + carry;
v.push_back(z % 10);
carry = z / 10;
}
while (carry != 0)
{
v.push_back(carry % 10);
carry = carry / 10;
}
for (int k = v.size(); k < n; k++)
v.push_back(0);
reverse(v.begin(), v.end());
vr.push_back(v);
v.clear();
}
int tot = vr.size();
vector<int> v;
carry = 0;
for (int i = n - 1; i >= 0; i--)
{
z = 0;
for (int j = 0; j < tot; j++)
{
z += vr[j][i];
}
z += carry;
v.push_back(z % 10);
carry = z / 10;
}
while (carry != 0)
{
v.push_back(carry % 10);
carry = carry / 10;
}
string s = "";
reverse(v.begin(), v.end());
for (auto it : v)
s += it + '0';
int i;
for (i = 0; i < s.size(); i++)
if (s[i] != '0')
break;
s.erase(0, i);
return s;
}
};
Comments
Post a Comment