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); } };