【每週例題】力扣 C++ 字串相乘

山远尽成云發表於2024-05-25

字串相乘

題目

字串相乘

題目分析

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;
    }
};

  

相關文章