【每周例题】力扣 C++ 字符串相乘

字符串相乘

题目

字符串相乘

题目分析

1.首先,题目上标出了一条:注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。这就是这道题的难度所在

2.这样子的话,我们可以从手写乘法计算来寻找思路:

 ①首先我们需要将各位相乘的结果放入数组ansArr中,我们使用双重for循环计算num1与num2相乘

 ②我们将相乘的结果放入ansArr中,最后再进行进位计算

代码

#include <iostream>  
#include <string>  
#include <vector>  

using namespace std;

int main() 
{
    string num1, num2;
    cin >> num1 >> num2;

    //0乘任何数为0
    if (num1 == "0" || num2 == "0") 
    {
        cout << "0";
        return 0;
    }

    //计算num1,num2长度
    int m = num1.size(), n = num2.size();
    vector<int> ansArr(m + n, 0); // 初始化为0  

    //计算乘法
    for (int i = m - 1; i >= 0; i--) 
    {
        int x = num1[i] - '0';
        for (int j = n - 1; j >= 0; j--) 
        {
            int y = num2[j] - '0';
            int sum = ansArr[i + j + 1] + x * y;
            //进位
            ansArr[i + j + 1] = sum % 10;
            ansArr[i + j] += sum / 10;
        }
    }

    string ans;
    bool leadingZero = true; // 用于跳过前导零  
    for (int i = 0; i < m + n; i++) 
    {
        if (ansArr[i] != 0 || !leadingZero) 
        {
            leadingZero = false;
            ans.push_back(ansArr[i] + '0'); // 将整数转换为字符  
        }
    }

    cout << ans;
    return 0;
}

 力扣代码:

class Solution {
public:
    string multiply(string num1, string num2) 
    {
        if (num1 == "0" || num2 == "0") 
            return "0";

        int m = num1.size(), n = num2.size();
        vector<int> ansArr(m + n, 0); // 初始化为0  

        for (int i = m - 1; i >= 0; i--) 
        {
            int x = num1[i] - '0';
            for (int j = n - 1; j >= 0; j--) 
            {
                int y = num2[j] - '0';
                int sum = ansArr[i + j + 1] + x * y;
                ansArr[i + j + 1] = sum % 10;
                ansArr[i + j] += sum / 10;
            }
        }

        string ans;
        bool leadingZero = true; // 用于跳过前导零  
        for (int i = 0; i < m + n; i++) 
        {
            if (ansArr[i] != 0 || !leadingZero) 
            {
                leadingZero = false;
                ans.push_back(ansArr[i] + '0'); // 将整数转换为字符  
            }
        }

        return ans;
    }
};

  

 

posted @ 2024-05-25 17:56  山远尽成云  阅读(49)  评论(0)    收藏  举报