小启洋同学 发表于 2023-12-30 15:06:18

c++高精度乘法怎么做

?????????????????

FishC 发表于 2023-12-30 15:07:25

在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 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2023-12-30 15:22:01

#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;
}

这个不行吗

小启洋同学 发表于 2023-12-30 15:43:09

{:10_254:}
页: [1]
查看完整版本: c++高精度乘法怎么做