Leetcode43字符串相乘
- 题解1(按位计算)
 
给定两个以字符串形式表示的非负整数
num1 和 
num2,返回 
num1 和 
num2 的乘积,它们的乘积也表示为字符串形式。 
 
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
来源:力扣(LeetCode)题目链接
 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
 
提示:
1 <= num1.length, num2.length <= 200num1和num2只能由数字组成。num1和num2都不包含任何前导零,除了数字0本身。
题解1(按位计算)
class Solution {
public:
    string multiply(string num1, string num2) {
        const int s1 = num1.length();
        const int s2 = num2.length();
        // 相乘结果最长s1+s2位
        vector<int> sum = vector(s1 + s2, 0);
        
        for(int i=s1-1; i>=0; i--){
            int k = num1[i] - '0';
            for(int j=s2-1; j>=0; j--){
                int f = num2[j] - '0';
                // key : 按位思想即可发现位置关系(i+j, i+j+1) --- 最重要
                int l = k*f + sum[i+j+1];
                sum[i+j] += l/10;
                sum[i+j+1] = l%10; 
            }
        }
        int i = 0;
        // 除 0
        for(; i < sum.size() && sum[i]==0; i++);
        string str("");
        for(; i<sum.size(); i++){
            str.push_back(sum[i]+'0');
        }
        // 如果结果是0 上面的循环返回的是空str
        return str.size() == 0 ? "0" : str;
    }
};
 




















