您的位置:首页 > 其它

LeetCode Multiply Strings

2014-06-19 10:35 363 查看
题目

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 {
int carry;
public:
int toNum(char c)	//字符到数
{
return c-'0';
}
char toChar(int n)	//数到字符
{
return '0'+n;
}
char charMul(char c1,char c2)	//两个字符表示的数相乘
{
int n=toNum(c1)*toNum(c2)+carry;
carry=n/10;
return toChar(n%10);
}
string scMul(string s,char c,int n)	//字符串表示的数和字符表示的一位数相乘,n为字符所在的位,补0用
{
string ans;
if(c=='0')
return "0";
for(int i=0;i<n;i++)
ans.push_back('0');	//补低位的0
carry=0;
int len=s.size();
for(int i=0;i<len;i++)
ans.push_back(charMul(s[i],c));
if(carry!=0)
{
ans.push_back(toChar(carry));
carry=0;
}
return ans;
}
string add(string s1,string s2)	//两个字串表示的数求和
{
string ans;
int dig,car=0;
int len1=s1.size(),len2=s2.size();
int i=0,j=0;
while(i<len1||j<len2)
{
dig=car;
if(i<len1)
dig+=toNum(s1[i++]);
if(j<len2)
dig+=toNum(s2[j++]);
car=dig/10;
dig%=10;
ans.push_back(toChar(dig));
}
if(car>0)
ans.push_back(toChar(car));
return ans;
}
string multiply(string num1, string num2) {
string ans,temp;
reverse(num1.begin(),num1.end());
reverse(num2.begin(),num2.end());
if(num1.size()<num2.size())
{
temp=num1;
num1=num2;
num2=temp;
}
int len=num2.size();
for(int i=0;i<len;i++)
{
temp=scMul(num1,num2[i],i);
ans=add(ans,temp);
}
reverse(ans.begin(),ans.end());
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: