字节跳动:字符串相乘-爱代码爱编程
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = “2”, num2 = “3”
输出: “6”
示例 2:
输入: num1 = “123”, num2 = “456”
输出: “56088”
说明:
num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
代码如下:
class Solution {
public:
string multiply(string num1, string num2) {
if (num1 == "0" || num2 == "0")
{
return "0";
}
int i, j;
char resultString[220];
memset(resultString, '0', 220);
string result;
int num1Size = num1.size();
int num2Size = num2.size();
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int index;
for (i = 0; i < num1Size; ++i)
{
int add = 0;
char num1element = num1[i];
for (j = 0; j < num2Size; ++j)
{
char num2element = num2[j];
int multResult = (num1element - 48)*(num2element - 48) + (resultString[i + j] - 48) + add;
add = multResult / 10;
resultString[i + j] = (multResult % 10) + 48;
}
index = i + num2Size;
while (add > 0)
{
resultString[index] = (add % 10) + 48;
add /= 10;
++index;
}
}
resultString[index] = '\0';
result = resultString;
reverse(result.begin(), result.end());
return result;
}
};
运行结果:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/fangwei1993/article/details/106670462