地址
https://leetcode-cn.com/problems/multiply-strings/submissions/
描述
思想
代码
C++
class Solution {
public:
string multiply(string num1, string num2) {
vector<int> a,b;
int n=num1.size(),m=num2.size();
//倒着将字符串存入数组
for(int i=n-1;i>=0;i--) a.push_back(num1[i]-'0');
for(int i=m-1;i>=0;i--) b.push_back(num2[i]-'0');
//以num1 = "123", num2 = "456"举例
//num1[]={3,2,1},num2={6,5,4}
//n位的num1与m位的num2相乘最大可得n+m位,可能达不到n+m位,前面为0
vector<int> c(n+m);
//不处理进位相乘
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
c[i+j]+=a[i]*b[j];
}
}
//从0开始处理进位
for(int i=0,t=0;i<c.size();i++){
t+=c[i];//加上进位
c[i]=t%10;//余数
t/=10;//产生进位
}
int k=n+m-1;
while(k>0){
if(c[k]==0) k--;
else break;
}
string res;
for(int i=k;i>=0;i--){
res+=c[i]+'0';
}
return res;
}
};
Java
class Solution {
public String multiply(String num1, String num2) {
int n=num1.length();
int m=num2.length();
int []a=new int [n];
int []b=new int [m];
for(int i=0;i<n;i++) a[i]=num1.charAt(n-i-1)-'0';
for(int i=0;i<m;i++) b[i]=num2.charAt(m-i-1)-'0';
int []c=new int [n+m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
c[i+j]+=a[i]*b[j];
}
}
int t=0;
for(int i=0;i<n+m;i++){
t+=c[i];
c[i]=t%10;
t/=10;
}
int k=n+m-1;
while(k>0&&c[k]==0)k--;
StringBuilder sb=new StringBuilder("");
for(int i=k;i>=0;i--){
sb.append(c[i]);
}
return sb.toString();
}
}