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)
{
if(num1=="0" || num2=="0")
return "0";
int n = num1.length();
int m = num2.length();
if(n<m)
return multiply(num2,num1);
string temp;
string res = "";
int i,j=m-1,count;
int num0 = 0;
while(j>=0)
{
temp = "";
count = 0;
i=n-1;
while(i>=0)
{
count = count + (num1[i]-48)*(num2[j]-48);
temp = temp + (char)(count%10+48);
count = count/10;
i--;
}
if(count!=0)
temp = temp + (char)(count+48);
int low = 0;
int high = temp.length()-1;
while(low<high)
swap(temp,low++,high--);
for(int i=0; i<num0; i++)
temp= temp + "0";
res = add(res,temp);
num0++;
j--;
}
return res;
}
void swap(string& s, int i, int j)
{
char t = s[i];
s[i] = s[j];
s[j] = t;
}
string add(string a, string b)
{
string res="";
int n = a.length();
int m = b.length();
if(n==0)
return b;
if(m==0)
return a;
int i=n-1,j=m-1;
int count = 0;
while(i>=0 || j>=0)
{
if(i<0)
{
count = count + b[j]-48;
res = res + (char)(count%10 + 48);
count = count/10;
j--;
}
else if(j<0)
{
count = count + a[i]-48;
res = res + (char)(count%10 + 48);
count = count/10;
i--;
}
else
{
count = count + (a[i]-48)+(b[j]-48);
res = res + (char)(count%10 + 48);
count = count/10;
j--;
i--;
}
}
if(count!=0)
res = res + (char)(count+48);
int low = 0;
int high = res.length()-1;
while(low<high)
swap(res,low++,high--);
return res;
}
};原文:http://blog.csdn.net/shaya118/article/details/42773715