LeetCode-Multiply Strings-字符串乘法-大整数-字符串操作
https://oj.leetcode.com/problems/multiply-strings/
实现两个函数:
1)字符与一个串的乘法。
2)两个串的加法。
再考虑一些边界情况即可。
class Solution {
public:
int n,m;
string Mul(char ch,string &s){
int up=0;
int ich=ch-'0';
string res;
for (int i=0;i<n;i++){
int ia=s[i]-'0';
int cur=ia*ich + up;
up=cur/10;
cur=cur%10;
res.push_back('0'+cur);
}
if (up) res.push_back('0'+up);
return res;
}
string Add(string &c,string &r,int p){
string res;
int up=0;
for (int i=0;i<max(c.length(),r.length()+p);i++){
char a,b;
if (i>=c.length()) a='0';
else a=c[i];
if (i<p || i>=(r.length()+p)) b='0';
else b=r[i-p];
int ia=a-'0';
int ib=b-'0';
int cc=ia+ib+up;
up=cc/10;
cc=cc%10;
res.push_back('0'+cc);
}
if (up) res.push_back('0'+up);
return res;
}
string multiply(string num1, string num2) {
reverse(num1.begin(),num1.end());
reverse(num2.begin(),num2.end());
n=num1.length();
m=num2.length();
string cur;
for (int i=0;i<m;i++){
char ch=num2[i];
string r=Mul(ch,num1);
cur=Add(cur,r,i);
}
reverse(cur.begin(),cur.end());
bool conflag=true;
int preZero=0;
for (int i=0;i<cur.length()-1;i++){
if (cur[i]!='0'){
conflag=false;
}
else{
if (conflag){
preZero++;
}
}
}
return cur.substr(preZero,cur.length()-preZero);
}
};
浙公网安备 33010602011771号