字串相乘
題目
字串相乘
題目分析
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; } };