用c++设计一个实现两个长整型相乘的程序。
时间: 2024-03-20 20:43:50 浏览: 61
好的,这里给您提供一种可能的实现方式:
```c++
#include<iostream>
#include<string>
using namespace std;
string multiply(string num1, string num2) {
int n1 = num1.size();
int n2 = num2.size();
if (n1 == 0 || n2 == 0)
return "0";
// 用vector存储相乘的结果
vector<int> result(n1 + n2, 0);
// 从num1的最后一位开始,逐位与num2相乘
int i_n1 = 0;
int i_n2 = 0;
for (int i = n1 - 1; i >= 0; i--) {
int carry = 0;
int n1 = num1[i] - '0';
// 每次与num2的所有位相乘
i_n2 = 0;
for (int j = n2 - 1; j >= 0; j--) {
int n2 = num2[j] - '0';
int sum = n1 * n2 + result[i_n1 + i_n2] + carry;
carry = sum / 10;
result[i_n1 + i_n2] = sum % 10;
i_n2++;
}
// 处理进位
if (carry > 0)
result[i_n1 + i_n2] += carry;
i_n1++;
}
// 去掉前导0
int i = result.size() - 1;
while (i >= 0 && result[i] == 0)
i--;
if (i == -1)
return "0";
// 把vector转换为string
string s = "";
while (i >= 0)
s += to_string(result[i--]);
return s;
}
int main() {
string num1 = "123456789";
string num2 = "987654321";
string result = multiply(num1, num2);
cout << num1 << " * " << num2 << " = " << result << endl;
return 0;
}
```
这个程序使用了字符串来存储长整型,逐位相乘,然后用vector来存储相乘的结果,最后再把vector转换为字符串。
阅读全文