您的位置:首页 > 其它

Multiply Strings(字符串乘法模拟,包含了加法模拟)

2014-11-24 12:30 344 查看
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 {
private:
vector<string> tempStrs;
public:
string add(string num1,string num2)
{
int n1=num1.size();
int n2=num2.size();
int i=n1-1;int j=n2-1;
string resStr;
int jinwei=0;
while (i>=0&&j>=0)
{
int temp=(num1[i]-'0')+(num2[j]-'0')+jinwei;
jinwei=temp>=10?1:0;
temp%=10;
resStr.push_back(temp+'0');
--i;
--j;
}
if(i>=0){
while (i>=0)
{
int temp=(num1[i]-'0')+jinwei;
jinwei=temp>=10?1:0;
temp%=10;
resStr.push_back(temp+'0');
--i;
}
}
else if(j>=0){
while (j>=0)
{
int temp=(num2[j]-'0')+jinwei;
jinwei=temp>=10?1:0;
temp%=10;
resStr.push_back(temp+'0');
--j;
}
}
if(jinwei!=0){
resStr.push_back(jinwei+'0');
}
reverse(resStr.begin(),resStr.end());
return resStr;
}
string multiply(string num1, string num2) {
if(num1.empty()||num2.empty()) return "";
if(num1=="0"||num2=="0") return "0";
int jinwei=0;
int n1=num1.size();
int n2=num2.size();
if(n2>n1){
string temp=num1;
num1=num2;
num2=temp;
n1=num1.size();
n2=num2.size();
}
int time=0;
string tempStr;
string res;
for(int i=n2-1;i>=0;--i)
{
tempStr.clear();
jinwei=0;
for(int j=n1-1;j>=0;--j)
{
int temp=(num1[j]-'0')*(num2[i]-'0')+jinwei;
jinwei=temp>=10?(temp/10):0;
temp=temp%10;
tempStr.push_back(temp+'0');
}
if(jinwei!=0){
tempStr.push_back(jinwei+'0');
}
reverse(tempStr.begin(),tempStr.end());
for(int q=0;q<time;++q){
tempStr.push_back('0');
}
tempStrs.push_back(tempStr);
++time;
}
if(tempStrs.size()>1){
res=add(tempStrs[0],tempStrs[1]);
for (int i=2;i<tempStrs.size();++i)
{
res=add(res,tempStrs[i]);
}
return res;
}else
{
return tempStrs[0];
}

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: