您的位置:首页 > 其它

LeetCode - Multiply Strings

2013-08-28 22:53 405 查看
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:

void add(string &result, string &num){
int len1=result.size(),len2=num.size();
if(len1<len2){
string tmp(result);
result.assign(num.begin(),num.end());
num.assign(tmp.begin(),tmp.end());
}
int j=result.size()-1;
int sum=0,flag=0;
for(int i=num.size()-1;i>=0;i--,j--){
sum=result[j]+num[i]-'0'-'0'+flag;
flag=sum/10;
sum%=10;
result[j]=sum+'0';
}
for(;j>=0;j--){
sum=result[j]-'0'+flag;
flag=sum/10;
sum%=10;
result[j]=sum+'0';
}
if(flag){
result.insert(result.begin(),flag+'0');
}
}

void multiply(string &result,const string &num,const char &c){
int tmp=0,sign=0;
for(int i=num.size()-1;i>=0;i--){
tmp=(num[i]-'0')*(c-'0')+sign;
sign=tmp/10;
tmp%=10;
result.insert(result.begin(),tmp+'0');
}
if(sign){
result.insert(result.begin(),sign+'0');
}
}

string multiply(string num1, string num2) {
string result("0"),num3;
if(num1=="0"||num2=="0"){
return result;
}
int len1=num1.size(),len2=num2.size();
if(len1<len2){
return multiply(num2,num1);
}
for(int i=len2-1;i>=0;i--){
num3.clear();
multiply(num3,num1,num2[i]);
for(int j=0;j<len2-1-i;j++){
num3.insert(num3.end(),'0');
}
add(result,num3);
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: