#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string add(string num1, string num2) {
string result; //reversed
int idx1 = num1.size()-1, idx2 = num2.size() - 1, carry = 0, sum;
char temp;
while (idx1 >= 0 && idx2 >= 0) {
int digit1 = num1[idx1] - '0';
int digit2 = num2[idx2] - '0';
sum = carry + digit1 + digit2;
temp = (sum % 10) + '0';
result.push_back(temp);
carry = sum / 10;
idx1--; idx2--;
}
while (idx1 >= 0) {
int digit1 = num1[idx1] - '0';
sum = carry + digit1;
temp = (sum % 10) + '0';
result.push_back(temp);
carry = sum / 10;
idx1--;
}
while (idx2 >= 0) {
int digit2 = num2[idx2] - '0';
sum = carry + digit2;
temp = (sum % 10) + '0';
result.push_back(temp);
carry = sum / 10;
idx2--;
}
while (carry) {
sum = carry;
temp = (sum % 10) + '0';
result.push_back(temp);
carry = sum / 10;
}
reverse(result.begin(), result.end());
return result;
}
string subMultiply(string num1, char num2) {
//num2 is of single digit
string result; // reversed
int num = num2 - '0';
int idx1 = num1.size() - 1, carry = 0, sum;
char temp;
while (idx1 >= 0) {
int digit1 = num1[idx1] - '0';
sum = carry + (digit1 * num);
temp = (sum % 10) + '0';
result.push_back(temp);
carry = sum / 10;
idx1--;
}
while (carry) {
sum = carry;
temp = (sum % 10) + '0';
result.push_back(temp);
carry = sum / 10;
}
reverse(result.begin(), result.end());
return result;
}
string multiplyByPow10(string num, int power) {
if (power == 0) return num;
string result(num);
for (int i = 1; i <= power; i++) result.push_back('0');
return result;
}
string multiply(string num1, string num2) {
if (num1[0] == '0' || num2[0] == '0') return "0";
int n = num2.size();
string result = "0";
for (int i = 0; i < n; i++) {
string subResult = multiplyByPow10(subMultiply(num1, num2[n-i-1]), i);
result = add(result, subResult);
}
return result;
}
int main() {
string num1, num2;
cout << "Enter two positive numbers without any leading zeroes" << endl;
cout << "num1: ";
cin >> num1;
cin.ignore(1, '\n');
cout << "num2: ";
cin >> num2;
cout << "Ans: " << multiply(num1, num2) << endl;
return 0;
}
Comments
Post a Comment