LeetCode43. Multiply Strings

题目链接:

https://leetcode.com/problems/multiply-strings/

题目描述:

字符串实现大数相乘。

题目分析:

先给一个int型数组分配大小为num1.size()+num2.size(),用它存放两个字符串中每个数相乘的结果。num1第i位与num2第j位相乘,结果应当是放在第i+j+1位。如果i+j+1位有值,直接加上去。多加一个1是为了处理v[0]进位问题,如果是放在i+j位,v[0]>=10,不能进位。
然后再从后往前遍历一次,处理进位。
最后遍历去掉前置0。再转化为string类型就ok啦。

代码:

class Solution {
public:
    string multiply(string num1, string num2) {
        if(num1=="0" || num2=="0"){
            return "0";
        }
        int len1=num1.size();
        int len2=num2.size();
        vector<int> v(len1+len2,0);
        for(int i=0;i<len1;i++){
            for(int j=0;j<len2;j++){
                v[i+j+1]+=(num1[i]-'0')*(num2[j]-'0');
            }
        }
        for(int i=len1+len2-1;i>=0;i--){
            if(v[i]>=10){
                v[i-1]+=v[i]/10;
                v[i]%=10;
            }
        }
        int k=0;
        while(v[k]==0){
            k++;
        }
        string result="";
        while(k<len1+len2){
            result+=(v[k]+'0');
            k++;
        }
        return result;
    }
};

你可能感兴趣的:(LeetCode,String)