字符串相乘的实现(C++)

LeetCode 45. 字符串相乘

/*  
    给定两个以字符串形式表示的非负整数 num1 和 num2,
    返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式

    思路:
    1. 乘数 num1 位数为 M,被乘数 num2 位数为 N, num1 x num2 结果 res 最大总位数为 M+N
    2. num1[i] x num2[j] 的结果为 tmp(位数为两位,"0x","xy"的形式),
       其第一位位于 res[i+j],第二位位于 res[i+j+1]
*/
    string multiply(string num1, string num2) {
    
    
        if (num1.empty() || num2.empty() || num1.at(0) == '0' || num2.at(0) == '0') {
    
    
            return num1.empty() ? num2 : 
                (num1.at(0) == '0' || num2.at(0) == '0') ? string("0") : num1;
        }
        vector<int> result(num1.length() + num2.length(), 0);
        for (int i1 = num1.length() - 1; i1 >= 0; i1--) {
    
    
            int n1 = num1.at(i1) - '0';
            for (int i2 = num2.length() - 1; i2 >= 0; i2--) {
    
    
                int n2 = num2.at(i2) - '0';
                int sum = result.at(i1 + i2 + 1) + n1 * n2;
                result.at(i1 + i2 + 1) = sum % 10;
                result.at(i1 + i2) += sum / 10;
            }
        }
        string res;
        for (int i = 0; i < result.size(); i++) {
    
    
            if (i == 0 && result.at(i) == 0) {
    
    
                continue;
            }
            res.append(to_string(result.at(i)));
        }
        return res;
    }

如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢

猜你喜欢

转载自blog.csdn.net/xiao_ma_nong_last/article/details/105302862
今日推荐