大数乘法代码
时间: 2023-07-09 17:04:30 浏览: 106
以下是一个简单的大数乘法的代码实现(使用字符串存储大数):
```python
def multiply(num1, num2):
if num1 == "0" or num2 == "0":
return "0"
m, n = len(num1), len(num2)
res = [0] * (m + n) # 存储计算结果的数组
for i in range(m-1, -1, -1):
x = int(num1[i])
for j in range(n-1, -1, -1):
y = int(num2[j])
res[i+j+1] += x * y # 计算乘积并存储到对应位置上
carry = 0 # 处理进位
for i in range(m+n-1, -1, -1):
sum = res[i] + carry
res[i], carry = sum % 10, sum // 10
ans = ''.join(map(str, res)).lstrip('0') # 转换为字符串并去掉前导零
return ans if ans else "0"
```
该算法的时间复杂度为 $O(mn)$,其中 $m$ 和 $n$ 分别为两个大数的位数。
相关问题
帮我生成 大数乘法 的代码c++
以下是一个简单的实现大数乘法的 C++ 代码:
```c++
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector<int> multiply(vector<int>& num1, vector<int>& num2) {
int n1 = num1.size(), n2 = num2.size();
vector<int> res(n1 + n2, 0);
for (int i = n1 - 1; i >= 0; i--) {
for (int j = n2 - 1; j >= 0; j--) {
int mul = num1[i] * num2[j];
int p1 = i + j, p2 = i + j + 1;
int sum = mul + res[p2];
res[p2] = sum % 10;
res[p1] += sum / 10;
}
}
while (res.size() > 1 && res.back() == 0) {
res.pop_back();
}
return res;
}
int main() {
string s1, s2;
cin >> s1 >> s2;
vector<int> num1(s1.size()), num2(s2.size());
for (int i = 0; i < s1.size(); i++) {
num1[i] = s1[i] - '0';
}
for (int i = 0; i < s2.size(); i++) {
num2[i] = s2[i] - '0';
}
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
vector<int> res = multiply(num1, num2);
reverse(res.begin(), res.end());
for (int i = 0; i < res.size(); i++) {
cout << res[i];
}
cout << endl;
return 0;
}
```
这段代码中,我们使用了 vector 来存储大数,并且从低位到高位进行计算。其中,multiply 函数接受两个大数的 vector,返回它们的乘积。在函数中,我们使用两个指针 i 和 j 分别指向两个数的末尾,然后从后往前遍历,依次计算每一位的乘积,并将结果加到 res 数组中。最后,我们再去掉 res 数组中的前导零,然后将结果翻转后输出即可。
需要注意的是,这里的大数应该以字符串的形式输入,然后转换为 vector<int>。因为在输入过程中,如果使用 int 或者 long long 类型来存储,已经超过这些类型的范围时,就无法正确地读入这些数。
java大数乘法数组
您好!要实现大数乘法,可以将两个大数分别存储在数组中,然后按照乘法的规则进行计算。
以下是一个简单的 Java 代码示例,用于实现大数乘法:
```java
public class LargeNumberMultiplication {
public static void main(String[] args) {
String num1 = "123456789";
String num2 = "987654321";
int[] result = multiply(num1.toCharArray(), num2.toCharArray());
System.out.print("结果: ");
for (int i : result) {
System.out.print(i);
}
}
public static int[] multiply(char[] num1, char[] num2) {
int m = num1.length;
int n = num2.length;
int[] result = new int[m + n];
for (int i = m - 1; i >= 0; i--) {
for (int j = n - 1; j >= 0; j--) {
int mul = (num1[i] - '0') * (num2[j] - '0');
int p1 = i + j;
int p2 = i + j + 1;
int sum = mul + result[p2];
result[p1] += sum / 10;
result[p2] = sum % 10;
}
}
// 移除结果数组前面的0
int i = 0;
while (i < result.length && result[i] == 0) {
i++;
}
if (i == result.length) {
return new int[]{0};
}
return Arrays.copyOfRange(result, i, result.length);
}
}
```
上述代码中,我们将两个大数分别存储在 `num1` 和 `num2` 数组中,然后通过两层循环计算乘法并将结果保存在 `result` 数组中。最后,我们将 `result` 数组转换为整数数组并输出结果。
希望能帮到您!如有更多问题,请随时提问。
阅读全文