# 【LeetCode】 43. Multiply Strings ## Description > Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string. > Note: > - The length of both num1 and num2 is < 110. > - Both num1 and num2 contain only digits 0-9. > - Both num1 and num2 do not contain any leading zero, except the number 0 itself. > - You must not use any built-in BigInteger library or convert the inputs to integer directly. > 給兩個字串num1和num2代表兩個非負整數,回傳num1和num2的乘積,回傳型態同樣使用字串。 > 注意: > - num1和num2的長度小於110。 > - num1和num2都只會包含數字0-9。 > - num1和num2都不會有0在開頭,除非他們本身就等於零。 > - 你不應該使用任何內建大數函式庫,或是直接轉換輸入型別到數字。 ## Example: ``` Example 1: Input: num1 = "2", num2 = "3" Output: "6" Example 2: Input: num1 = "123", num2 = "456" Output: "56088" ``` ## Solution * **大數運算**的題目,基本上就你要你實作大數乘法。 * 將每一個位元都去表示一位數,計算時先不考慮進位(數字可以大於10),等到每一位元都加總完之後,再由最低位元往上進位。 * 需要注意的點: * 用`string`相當於`vector<char>`,你可能會因此溢位。 * 注意高位元和低位元,運算時不要搞反了。 * 多餘的零必須移除。 ### Code ```C++=1 class Solution { public: string multiply(string num1, string num2) { int s1=num1.size(),s2=num2.size(); vector<short> mul(s1+s2,0); //compute each bit for(int i=0;i<s1;i++) { for(int j=0;j<s2;j++) { mul[s1+s2-2-(i+j)]+=(num1[i]-'0')*(num2[j]-'0'); } } //compute carry from low bit to high bit for(int i=0;i<mul.size();i++) { while(mul[i]>9) { mul[i+1]++; mul[i]-=10; } mul[i]+='0'; } //reverse and erase 0 string ans; bool isFirst=true; for(int i=mul.size()-1;i>=0;i--) { if(mul[i]=='0') { if(!isFirst) ans.push_back(mul[i]); } else { isFirst=false; ans.push_back(mul[i]); } } //if equal 0 if(isFirst) return "0"; return ans; } }; ``` ###### tags: `LeetCode` `C++`