首页 > 其他分享 >高精板子

高精板子

时间:2024-07-31 20:06:54浏览次数:11  
标签:cnt const len 板子 return num bign 高精

```cpp
struct bign {
  int d[MaxM], len;

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

  bign() {
    fill(d, d + MaxM, 0);
    len = 1;
  }
  bign(int num) { *this = num; }
  bign(string num) { *this = num; }

  bign operator=(const string num) {
    fill(d, d + MaxM, 0);
    len = num.size();
    for (int i = 0; i < len; i++) d[i] = num[len - 1 - i] - '0';
    clean();
    return *this;
  }

  bign operator=(int num) {
    string s;
    for (; num; num /= 10) s = char(num % 10 + '0') + s;
    *this = s;
    return *this;
  }

  bign operator+(const bign& b) {
    bign c = *this;
    int cnt;
    for (cnt = 0; cnt < b.len; cnt++) {
      c.d[cnt] += b.d[cnt];
      c.d[cnt + 1] += c.d[cnt] / 10, c.d[cnt] %= 10;
    }
    while (c.d[cnt] > 9) c.d[cnt++] %= 10, c.d[cnt]++;
    c.len = max(len, b.len);
    if (c.d[cnt] && c.len <= cnt) c.len = cnt + 1;
    return c;
  }

  bign operator-(const bign& b) {
    bign c = *this;
    int cnt;
    for (cnt = 0; cnt < b.len; cnt++) {
      c.d[cnt] -= b.d[cnt];
      if (c.d[cnt] < 0) c.d[cnt] += 10, c.d[cnt + 1]--;
    }
    while (c.d[cnt] < 0) c.d[cnt++] += 10, c.d[cnt]--;
    c.clean();
    return c;
  }

  bign operator*(const bign& b) const {
    bign c;
    c.len = len + b.len + 2;
    for (int i = 0; i < len; i++)
      for (int j = 0; j < b.len; j++)
        c.d[i + j] += d[i] * b.d[j];
    for (int i = 0; i < c.len - 1; i++)
      c.d[i + 1] += c.d[i] / 10, c.d[i] %= 10;
    c.clean();
    return c;
  }

  bign operator/(const bign& b) {
    bign c = *this, a = 0;
    for (int i = len - 1, j; i >= 0; i--) {
      a = a * 10 + d[i];
      for (j = 0; j < 10; j++)
        if (a < b * (j + 1)) break;
      c.d[i] = j;
      a = a - b * j;
    }
    c.clean();
    return c;
  }

  bign operator%(const bign& b) {
    bign a = 0;
    for (int i = len - 1, j; i >= 0; i--) {
      a = a * 10 + d[i];
      for (j = 0; j < 10; j++)
        if (a < b * (j + 1)) break;
      a = a - b * j;
    }
    return a;
  }

  bign operator+=(const bign& b) {
    *this = *this + b;
    return *this;
  }

  bool operator<(const bign& b) const {
    if (len != b.len) return len < b.len;
    for (int i = len - 1; i >= 0; i--)
      if (d[i] != b.d[i]) return d[i] < b.d[i];
    return false;
  }
  bool operator>(const bign& b) const { return b < *this; }
  bool operator<=(const bign& b) const { return !(b < *this); }
  bool operator>=(const bign& b) const { return !(*this < b); }
  bool operator!=(const bign& b) const { return b < *this || *this < b; }
  bool operator==(const bign& b) const { return !(b < *this) && !(b > *this); }

  string str() const {
    string s(len, '0');
    for (int i = 0; i < len; i++) s[len - 1 - i] = d[i] + '0';
    return s;
  }

  friend istream& operator>>(istream& in, bign& x) {
    string s;
    in >> s;
    x = s.c_str();
    return in;
  }

  friend ostream& operator<<(ostream& out, const bign& x) {
    out << x.str();
    return out;
  }
} f[MaxN], k;

标签:cnt,const,len,板子,return,num,bign,高精
From: https://www.cnblogs.com/ybtarr/p/18335361

相关文章

  • 北斗/GNSS高精度数据处理暨GAMIT/GLOBK v10.75软件应用
    目录第一部分、UBUNTU操作系统介绍与基本使用第二部分、GAMIT/GLOBK软件安装第三部分、数据获取与预处理第四部分、分步式“玩转”GAMIT软件第五部分、应用GAMIT+网平差软件进行高精度北斗/GNSS工程控制网数据处理与精度评估第六部分、“玩转”TRACK软件第七部分、分步......
  • 三种语言实现高精度加法(C++/Python/Java)
    题目给定两个正整数(不含前导00),计算它们的和。1≤整数长度≤100000C++#include<bits/stdc++.h>usingnamespacestd;vector<int>add(vector<int>&A,vector<int>&B){if(A.size()<B.size())returnadd(B,A);vector<int>C;......
  • 高精度/高精度
    #include<bits/stdc++.h>usingnamespacestd;intmain(){stringa,b;cin>>a>>b;vector<int>x,y;for(inti=a.size()-1;i>=0;i--){x.push_back(a[i]-'0');}for(inti=b.size()-1;i>=......
  • 高精度运算
    高精度运算高精度算法是一种模拟算法由于操作的对象为很大的数我们可以使用字符串字符串在C++有三种定义方式:chara[100];char*b;stringc;对于string,我们可以到oi-wiki进行查询高精度算法的本质是竖式运算为了使运算简单,我们使用vectorvector的定义为:vector<t......
  • 算法板子:滑动窗口——应用单调队列,找到窗口中的最小值与最大值
    #include<iostream>usingnamespacestd;constintN=1e6+10;inta[N];//q数组模拟单调队列;q数组存储原数组元素的下标;//递增单调队列的队头始终维护窗口中的最小值;队头存的是窗口中最小值的下标//递减单调队列的队头始终维护窗口中的最大值;队头存的......
  • 【基础算法】高精度算法
    高精度算法高精度加法模板:模板题+详解高精度减法模板:模板题+详解高精度乘法模板模板题+详解高精度除法模板模板题+详解计算机最初、也是最重要的应用就是数值运算。在编程进行数值运算时,有时会遇到运算的精度要求特别高,远远超过各种数据类型的精度范围;有时数......
  • 高精度 系列 未完善
    高精度还么完善会在8月份完成A*BBBB题目链接:https://ac.nowcoder.com/acm/contest/87255/D题意+分析:给你两个很大的正数a和b,b的位数都是相同的,需要计算a*b,可以知道单纯的a*b对c++同志是万万不可的,但是它的长度非常的大在1e6,如果单纯的使用普通的高精度的大数......
  • MSPM0G3507——电赛PCB板子,小零件太多,酌情使用
    只有CSDN一个账号,其他平台没有账号!只有CSDN一个账号,其他平台没有账号!只有CSDN一个账号,其他平台没有账号!原理图PCB文件完全免费分享。绘制了一个基于官方LP-MSPM0G3507开发板的控制题万用拓展底板;全外设集成,板载以下模块:1.板载一个三串18650电池盒与电池保护,充电芯片,可......
  • FFT 高精度乘法模板
    #defineL(x)(1<<(x))constdoublePI=acos(-1.0);constintN=1e7+10;doubleax[N],ay[N],bx[N],by[N];charsa[N/2],sb[N/2];intsum[N];intx1[N],x2[N];intrevv(intx,intbits){intret=0;for(inti=0;i<bits;i......
  • 探索绝对值码盘接口系列板卡:高精度测量与控制的关键组件
    天津拓航科技绝对值码盘卡在当今高度自动化和精密制造的时代,准确获取位置、角度和速度等信息对于许多工业和科技应用至关重要。绝对值码盘接口系列板卡作为实现这一目标的重要工具,正发挥着日益关键的作用。绝对值码盘接口系列板卡,顾名思义,是专门设计用于与绝对值码盘进行连接和......