您的位置:首页 > 其它

[*leetcode 43] Multiply Strings

2014-11-13 21:56 381 查看
Given two numbers represented as strings, return multiplication of the numbers as a string.

Note: The numbers can be arbitrarily large and are non-negative.

[Solution]

大数乘法主要有以下方法:

1、按照乘法法则直接乘,算法较简单,时间复杂度O(n^2)

2、分治法。

3、快速数论变换FNTT

2和3实现比较复杂,本次只完成1.

string multiply(string num1, string num2)
{
int i, j;
int m = num1.length(), n = num2.length();
char *ret = new char[m + n + 1];
string sret = "";

if ((num1 == "0") || (num2 == "0"))
return "0";
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
memset(ret, 0, m + n);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
int temp = (num1[i] - '0') * (num2[j] - '0');
ret[i + j] += temp % 10;
if (ret[i + j] > 9)
{
int at = ret[i + j];
ret[i + j] = at % 10;
ret[i + j + 1] += at / 10;
}
ret[i + j + 1] += temp / 10;
}
}

i = m + n - 1;
while (0 == ret[i])
i--;
while (i >= 0)
{
sret += (ret[i] + '0');
i--;
}

delete[] ret;
return sret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: