21xrx.com
2024-12-22 17:15:42 Sunday
登录
文章检索 我的文章 写文章
C++高精度乘法代码
2023-07-02 07:21:13 深夜i     --     --
C++ 高精度 乘法 代码

高精度乘法是指在C++中处理大数运算时,需要将两个超出基本数据类型范围的数做乘法运算。由于计算机硬件的限制,计算机在处理大数时也需要采用高精度运算方法。

C++高精度乘法代码如下:


#include <iostream>

#include <cstring>

#include <cstdio>

using namespace std;

struct bigint {

  const static int MAXN = 1000;

  const static int BASE = 10;

  int a[MAXN];

  int len;

  bigint() {

    memset(a, 0, sizeof(a));

    len = 0;

  }

  void clean() { while (len > 1 && !a[len-1]) len--; }

  bigint operator + (const bigint& b) const {

    bigint c;

    c.len = 0;

    for (int i = 0, g = 0; g || i < max(len, b.len); i++) {

      int x = g;

      if (i < len) x += a[i];

      if (i < b.len) x += b.a[i];

      c.a[c.len++] = x % BASE;

      g = x / BASE;

    }

    return c;

  }

  bigint operator - (const bigint& b) const {

    bigint c;

    c.len = 0;

    for (int i = 0, g = 0; i < len; i++) {

      int x = a[i] - g;

      if (i < b.len) x -= b.a[i];

      if (x >= 0) g = 0;

      else {

        g = 1;

        x += BASE;

      }

      c.a[c.len++] = x;

    }

    c.clean();

    return c;

  }

  bigint operator * (const bigint& b) const {

    bigint c;

    c.len = len + b.len;

    for (int i = 0; i < len; i++)

      for (int j = 0; j < b.len; j++)

        c.a[i+j] += a[i] * b.a[j];

    for (int i = 0; i < c.len-1; i++) {

      c.a[i+1] += c.a[i] / BASE;

      c.a[i] %= BASE;

    }

    c.clean();

    return c;

  }

};

ostream& operator << (ostream& out, const bigint& x) {

  out << x.a[x.len-1];

  for (int i = x.len-2; i >= 0; i--) {

    char buf[10];

    sprintf(buf, "%d", x.a[i]);

    int len = strlen(buf);

    for (int j = 0; j < len; j++) out << buf[j];

  }

  return out;

}

istream& operator >> (istream& in, bigint& x) {

  string s;

  if (!(in >> s)) return in;

  x = s;

  return in;

}

bigint c;

int main() {

  //测试样例: 123*1000=123000

  bigint a = "123";

  bigint b = "1000";

  cout << a * b << endl;

  return 0;

}

上述代码是高精度乘法的基本实现方式,其中定义了一个结构体`bigint`,表示大整数,在该结构体中,定义了高精度加、减、乘运算等基本操作,以及大数格式化输入、输出等操作。通过调用`*`运算符,可以实现高精度乘法。

在实际应用中,经常需要处理超过`10^18`的大整数,需要使用高精度运算方法,对于复杂的算法,也需要进行精细优化,以提高运算速度和减少内存占用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复