c++高精度乘法怎么做
????????????????? 在C++中,我们可以使用字符串来表示大整数,然后实现高精度乘法。下面是一个简单的示例代码:#include <iostream>
#include <string>
using namespace std;
string multiply(string num1, string num2) {
int n1 = num1.size();
int 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 - '0') * (num2 - '0');
// 乘积在res对应的索引位置
int p1 = i + j;
int p2 = i + j + 1;
// 叠加到res上
int sum = mul + res;
res = sum % 10;
res += sum / 10;
}
}
// 去除前导零
int i = 0;
while (i < res.size() && res == 0) {
i++;
}
// 将计算结果转化为字符串
string result = "";
for (; i < res.size(); i++) {
result += to_string(res);
}
return result.empty() ? "0" : result;
}
int main() {
string num1 = "123456789";
string num2 = "987654321";
cout << multiply(num1, num2) << endl;
return 0;
}
这个示例代码使用了两个字符串 `num1` 和 `num2` 来模拟两个大整数,然后实现了高精度乘法。输出结果为两个大整数的乘积。
当然,这只是一个简单的示例代码,还可以根据需求进行优化和扩展。希望对你有帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 #include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int MAXN = 2005;
int a={0},b={0},c={0};
int main()
{
string str1,str2;
cin>>str1>>str2;
int len1=str1.length();
int len2=str2.length();
for(int i=len1-1;i>=0;i--)
a=str1-'0'; //将str1倒序存储到a中,方便从个位开始逐位相乘
for(int i=len2-1;i>=0;i--)
b=str2-'0'; //同上
for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++)
c+=a*b; //根据乘法术算法进行累加
for(int i=1;i<=len1+len2;i++)
{
c+=c/10; //进位
c%=10; //取余数
}
int len=len1+len2;
while(c==0 && len>1) len--; //去掉前导0
for(int i=len;i>=1;i--)
cout<<c; //逆序输出
return 0;
}
这个不行吗
{:10_254:}
页:
[1]