Tuesday, February 3, 2015

43 Multiply Strings

Given two numbers represented as strings, return multiplication of the numbers as a string.
Note: The numbers can be arbitrarily large and are non-negative.
class Solution {
public:
    string multiply(string num1, string num2) {
        string n1,n2;
        for (int i=num1.size()-1;i>=0;i--)//reverse(num1.begin(),num2.end()) is better
            n1.push_back(num1[i]);
        for (int j=num2.size()-1;j>=0;j--)
            n2.push_back(num2[j]);
        
        string tmp(num1.size()+num2.size(),'0');
        for (int i=0;i<n2.size();i++)
        {
            int carry=0;
            int a = n2[i]-'0';
            for (int j=0;j<n1.size();j++)
            {
                int b = n1[j]-'0';
                int product = a*b+carry+tmp[i+j]-'0';
                int sum = product%10;
                carry = product/10;
                tmp[i+j]=sum+'0';
            }
            if (carry>0)
                tmp[i+n1.size()]=carry+'0';
        }
        string res;
        int i=tmp.size()-1;
        while(tmp[i]=='0' && i>=0)
            i--;
        if (i<0)
            return "0";
        while(i>=0)
            res.push_back(tmp[i--]);
        return res;
    }
};

No comments:

Post a Comment