又是一个需要很仔细注意的问题!!
考虑到实在复杂,所以分解成若干小问题一个个去注意。。
如何一个字符串乘一个字符
如何加两个字符串
为了方便,得到的暂时结果都是str[0]是最末尾数字,但是输入的str[0]是最大数字,我这样操作是为了方便简单操作。
class Solution {
public:
string mul(string &num1,char c)
{
string r;
int add=0;
int m=c-'0';
for(int i=num1.size()-1;i>=0;i--)
{
int sum=(num1[i]-'0')*m+add;
r+='0'+sum%10;
add=sum/10;
}
if(add!='0')
r+='0'+add;
return r;
}
string addStrN(string str,string sn,int n)
{
string r="";
int strlen=str.length();
int strsn=sn.length();
for(int i=0;i<n && i<strlen;i++)
{
r+=str[i];
}
if(strlen<n)
str.resize(n,'0');
int add=0;
for(int j=0;j<sn.length();j++)
{
int sum=0;
if(j+n<strlen)sum+=(str[j+n]-'0');
sum+=(sn[j]-'0')+add;
r+='0'+sum%10;
add=sum/10;
}
if(add!='0')
r+='0'+add;
return r;
}
string multiply(string num1, string num2) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(num2.size()==0) return num1;
string result="";
for(int i=0;i<num2.size();i++)
{
string rtmp=mul(num1,num2[num2.size()-1-i]);
result=addStrN(result,rtmp,i);
}
string result2;
int l=result.length()-1;
while(result[l]=='0' && l>0)
{
l--;
}
while(l>=0)
{
result2+=result[l];
l--;
}
return result2;
}
};