高精度模板

简介: 高精度模板

最近发现自己真的菜,连高精度都手写不出来了,在此插眼保存一份模板,以防忘记:

1.高精度加法:

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
string a,b;
vector<int>add(vector<int>&A,vector<int> &B)
{
    vector<int>C;
    int t=0;
    for(int i=0;i<A.size()||i<B.size();i++)
    {
        if(i<A.size()) t+=A[i];
        if(i<B.size()) t+=B[i];
        C.push_back(t%10);
        t/=10;
    }
    if(t) C.push_back(1);
    return C;
}
int main()
{
    cin>>a>>b;
    vector<int>A,B;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
    auto C=add(A,B);
    for(int i=C.size()-1;i>=0;i-- )
    cout<<C[i];
    cout<<endl;
}

2.高精度减法:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+19;
bool compare(vector<int>&A,vector<int>&B)
{
    if(A.size()!=B.size()) return A.size()>B.size();
    else
    {
        for(int i=A.size();i>=0;i--)
        {
            if(A[i]!=B[i])
            {
                return A[i]>B[i];
            }
        }
    }
    return true;
}
vector<int>sub(vector<int>&A,vector<int>&B)
{
    int t=0;
    vector<int>C;
    for(int i=0;i<A.size();i++)
    {
        t=A[i]-t;
        if(i<B.size()) t-=B[i];
        C.push_back((t+10)%10);
        if(t<0) t=1;
        else t=0;
    }
    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}
int main()
{
    string a;
    string b;
    cin>>a>>b;
    vector<int>A,B,C;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
    if(compare(A,B))
    {
        C=sub(A,B);
        for(int i=C.size()-1;i>=0;i--) cout<<C[i];
        cout<<endl;
    }else
    {
        C=sub(B,A);
        printf("-");
        for(int i=C.size()-1;i>=0;i--) cout<<C[i];
        cout<<endl;
    }
}

3.高精度乘法:

1.高精度X低精度

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
string a;
int b;
vector<int>mul(vector<int>&A,int &b)
{
    vector<int>C;
    int t=0;
    for(int i=0;i<A.size()||t;i++)
    {
        if(i<A.size())
        t+=A[i]*b;
        C.push_back(t%10);
        t/=10;
    }
    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}
int main()
{
    cin>>a>>b;
    vector<int>A,B,C;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    //for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
    C=mul(A,b);
    for(int i=C.size()-1;i>=0;i--)
    cout<<C[i];
    cout<<endl;
}

2.高精度X高精度

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
string a;
string b;
vector<int>mul(vector<int>&A,vector<int> &B)
{
    vector<int>C(A.size()+B.size(),0);
    for(int i=0;i<A.size();i++)
    for(int j=0;j<B.size();j++)
    C[i+j]+=B[j]*A[i];
    int t=0;
    for(int i=0;i<C.size()||t;i++)
    {
        t+=C[i];
        C[i]=t%10;
        t/=10;
    }
    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}
int main()
{
    cin>>a>>b;
    vector<int>A,B,C;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
    C=mul(A,B);
    for(int i=C.size()-1;i>=0;i--)
    cout<<C[i];
    cout<<endl;
}

4.高精度除法

1.高精度除以低精度:

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
string a;
int b;
vector<int>div(vector<int>&A,int &b,int &r)
{
    vector<int>C;
    for(int i=A.size()-1;i>=0;i--)
    {
        r=r*10+A[i];
        C.push_back(r/b);
        r%=b;
    }
    reverse(C.begin(),C.end());
    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}
int main()
{
    cin>>a>>b;
    vector<int>A,B,C;
    int r=0;//a/b余多少
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    C=div(A,b,r);
   for(int i=C.size()-1;i>=0;i--) cout<<C[i];
   cout<<endl<<r<<endl;
}

2.高精度除以高精度:

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
string a;
string b;
bool cmp(vector<int> &A, vector<int> &B){
    if(A.size()!=B.size()) return A.size()>B.size();
    for(int i=A.size()-1;i>=0;i--){
        if(A[i]!=B[i]) return A[i]>B[i]; 
    }
    return true;
}
vector<int> sub(vector<int> &A,vector<int> &B){
    vector<int> C;
    int t=0;
    for(int i=0;i<A.size()||t;i++){
        t = A[i] - t;
        if(i<B.size()) t -= B[i];
        C.push_back((t+10)%10);
        if(t<0) t = 1;
        else t = 0;
    }
    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}
vector<int> div(vector<int> &A, vector<int> &B, vector<int> &r){
    vector<int> C;
    int j = B.size();
    r.assign(A.end()-j,A.end());
    while(j<=A.size()){
        int k=0;
        while(cmp(r,B)){
            vector<int> s = sub(r,B);
            r.clear();
            r.assign(s.begin(),s.end());
            k++;
        }
        C.push_back(k);
        if(j<A.size()) r.insert(r.begin(),A[A.size()-j-1]);
        if(r.size()>1&&r.back()==0) r.pop_back();
        j++;
    }
    reverse(C.begin(),C.end());
    while(C.size()>1&&C.back()==0) C.pop_back();
    return C;
}
int main()
{
    cin>>a>>b;
    vector<int>A,B,C,r;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
    C=div(A,B,r);
   for(int i=C.size()-1;i>=0;i--) cout<<C[i];
   cout<<endl;
    for(int i=r.size()-1;i>=0;i--) printf("%d",r[i]);
    cout<<endl;
}

如果是python玩家:

a=int(input())
b=int(input())
print(a//b)
print(a%b)

int128:

__int128 read() {
  __int128 x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch) && ch != '-')ch = getchar();
  if (ch == '-')f = -1, ch = getchar();
  while (isdigit(ch))x = x * 10 + ch - '0', ch = getchar();
  return f * x;
}
inline void print(__int128 x) {
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (x > 9) print(x / 10);
  putchar(x % 10 + '0');
}
目录
相关文章
|
存储
高精度模板
                                                       #include #include #include #include #include using namespace ...
849 0
|
自动驾驶 定位技术 人工智能
|
9月前
自适应日落动态卡通动画404页面模板
自适应日落动态卡通动画404页面模板
42 4
自适应日落动态卡通动画404页面模板
|
传感器 人工智能 监控
Baumer工业相机堡盟相机如何使用自动曝光功能(自动曝光优点和行业应用)(C++)
Baumer工业相机堡盟相机如何使用自动曝光功能(自动曝光优点和行业应用)(C++)
193 0
|
9月前
|
传感器 编解码 计算机视觉
事件相机 PROPHESEE EVK4紧凑基于事件的 高清视觉评估套件 视觉传感 EVK4
探索基于事件的视觉,从 PROPHESEE EVK4 HD 开始。这款超轻、紧凑的高清 Metavision ®评估套件,可承受现场测试条件。集成 IMX636(高清),堆叠式事件视觉传感器由索尼半导体解决方案公司发布,由索尼和 PROPHESEE 合作实现。
事件相机 PROPHESEE EVK4紧凑基于事件的 高清视觉评估套件 视觉传感 EVK4
|
传感器 算法 机器人
Baumer工业相机堡盟相机如何使用PixelTransformation像素转换功能(像素转换功能的使用和优点以及行业应用)(C#)
Baumer工业相机堡盟相机如何使用PixelTransformation像素转换功能(像素转换功能的使用和优点以及行业应用)(C#)
121 0
|
传感器 算法 机器人
Baumer工业相机堡盟相机如何使用PixelTransformation像素转换功能(像素转换功能的使用和优点以及行业应用)(C++)
Baumer工业相机堡盟相机如何使用PixelTransformation像素转换功能(像素转换功能的使用和优点以及行业应用)(C++)
90 0
|
机器学习/深度学习 算法 自动驾驶
小议车辆环境视觉基础前视感知
# 1. 前言 无论是AD/ADAS还是智能网联车,前视感知都是其最基础和重要的能力之一。自动驾驶(AD)是前几年的热门话题。今天虽然稍微降温下来一些,但仍是大家关注的重点之一,毕竟它是人类长久以来的梦想之一。众所周知,美国汽车工程师学会(SAE)将自动驾驶分为 L0~L5共六个级别。其中L3及以上允许由系统在限定或不限定条件下完成所有的驾驶操作;而L2及以下还是需要由人类驾驶员一直保持驾驶状态
2328 0
|
数据可视化 物联网
Threejs物联网,养殖场3D可视化(三)模型展示,轨道控制器设置,模型沿着路线运动,模型添加边框,自定义样式显示标签,点击模型获取信息
Threejs物联网,养殖场3D可视化(三)模型展示,轨道控制器设置,模型沿着路线运动,模型添加边框,自定义样式显示标签,点击模型获取信息
988 15
Threejs物联网,养殖场3D可视化(三)模型展示,轨道控制器设置,模型沿着路线运动,模型添加边框,自定义样式显示标签,点击模型获取信息
|
数据可视化 异构计算
【视觉基础篇】17 # 如何使用后期处理通道增强图像效果?
【视觉基础篇】17 # 如何使用后期处理通道增强图像效果?
125 0
【视觉基础篇】17 # 如何使用后期处理通道增强图像效果?

热门文章

最新文章