# 字符串相乘

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

示例 1:

输入: num1 = "2", num2 = "3"
输出:
"6"

示例 2:

输入: num1 = "123", num2 = "456"
输出:
"56088"

说明:

  1. num1 和 num2 的长度小于110。
  2. num1 和 num2 只包含数字 0-9
  3. num1 和 num2 均不以零开头,除非是数字 0 本身。
  4. 不能使用任何标准库的大数类型(比如 BigInteger)直接将输入转换为整数来处理
以下程序实现了这一功能,请你填补空白处内容: ```cpp #include using namespace std; class Solution { public: string multiply(string num1, string num2) { string res(num1.length() + num2.length(), '0'); for (int i = num2.length() - 1; i >= 0; i--) { int j, carry = 0; for (j = num1.length() - 1; j >= 0; j--) { _____________________; } res[i + j + 1] = carry + '0'; } int i; for (i = 0; i < res.length() - 1; i++) { if (res[i] != '0') { break; } } return res.substr(i); } }; ``` ## template ```cpp #include using namespace std; class Solution { public: string multiply(string num1, string num2) { string res(num1.length() + num2.length(), '0'); for (int i = num2.length() - 1; i >= 0; i--) { int j, carry = 0; for (j = num1.length() - 1; j >= 0; j--) { carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j + 1] - '0'); res[i + j + 1] = carry % 10 + '0'; carry /= 10; } res[i + j + 1] = carry + '0'; } int i; for (i = 0; i < res.length() - 1; i++) { if (res[i] != '0') { break; } } return res.substr(i); } }; ``` ## 答案 ```cpp carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j + 1] - '0'); res[i + j + 1] = carry % 10 + '0'; carry /= 10; ``` ## 选项 ### A ```cpp carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j] - '0'); res[i + j] = carry % 10 + '0'; carry /= 10; ``` ### B ```cpp carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j] - '0'); res[i + j] = carry % 10 + '0'; carry %= 10; ``` ### C ```cpp carry += (num1[j] - '0') * (num2[i] - '0') + (res[i + j - 1] - '0'); res[i + j - 1] = carry % 10 + '0'; carry %= 10; ```