LeetCode.43. 字符串相乘
给定两个以字符串形式表示的非负整数 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)或直接将输入转换为整数来处理。
char * multiply(char * num1, char * num2){
if (NULL == num1 || NULL == num2)
{
return NULL;
}
if (num1[0] == '0' || num2[0] == '0')
{
char *res = (char *)calloc(2, sizeof(char));
res[0] = '0';
return res;
}
int len_num1 = strlen(num1);
int len_num2 = strlen(num2);
int len_total = len_num1 + len_num2;
int *cIntermeCacuRes = (int *)malloc(len_total * sizeof(int));
memset(cIntermeCacuRes, 0, sizeof(int) * len_total);
for (int i = len_num1 - 1; i >= 0; --i)
{
for (int j = len_num2 - 1; j >= 0; --j)
{
cIntermeCacuRes[i + j + 1] += (num1[i] - '0') * (num2[j] - '0');
}
}
for (int k = len_total - 1; k > 0; --k)
{
cIntermeCacuRes[k - 1] += cIntermeCacuRes[k] / 10;
cIntermeCacuRes[k] %= 10;
}
char *res = (char *)malloc(sizeof(char) * (len_total + 1));
int index = 0, indexVal = 0;
for (int i = 0; i < len_total; ++i)
{
if (cIntermeCacuRes[i] == 0)
{
continue;
}
// if (cIntermeCacuRes > 0) index = i;
else
{
index = i;
break;
}
}
for (int j = index; j < len_total; j++)
{
res[indexVal++] = cIntermeCacuRes[j] + '0';
}
res[indexVal] = '\0';
free(cIntermeCacuRes);
return res;
}