zoukankan      html  css  js  c++  java
  • 高精度【模板】

    最近蒟蒻刚学了高精算法,来发个模板吧!



    高精加(HAA)【模板】

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 string x,y;
     4 int a[100010],b[100010],c[100010],xa,xb,xc;
     5 /*数组大小根据题目数据范围大小确定
     6   此模板只适用于0≤x,y≤10^(10^5)的情况*/
     7 int main(){
     8     cin>>x>>y;
     9     xa=x.length(),xb=y.length();
    10     xc=max(xa,xb);
    11     for(int i=0;i<xa;i++) a[xa-i]=x[i]-'0';
    12     for(int i=0;i<xb;i++) b[xb-i]=y[i]-'0';
    13     for(int i=1;i<=xc;i++){
    14         c[i]+=a[i]+b[i];
    15         c[i+1]=c[i]/10;
    16         c[i]%=10;
    17     }
    18     if(c[xc+1]) xc++;
    19     for(int i=xc;i>=1;i--) cout<<c[i];
    20     return 0;
    21 }


    高精减(HAS)【模板】

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 string x,y;
     4 int a[100010],b[100010],c[100010],xa,xb;
     5 /*数组大小根据题目数据范围大小确定
     6   此模板只适用于0≤x,y≤10^(10^5)的情况*/
     7 int main(){
     8     cin>>x>>y;
     9     xa=x.length(),xb=y.length();
    10     if(xa<xb||xa==xb&&x<y){
    11         swap(x,y);
    12         swap(xa,xb);
    13         cout<<"-";
    14     }
    15     for(int i=0;i<xa;i++) a[xa-i]=x[i]-'0';
    16     for(int i=0;i<xb;i++) b[xb-i]=y[i]-'0';
    17     for(int i=1;i<=xa;i++){
    18         if(a[i]<b[i]){
    19             a[i]+=10;
    20             a[i+1]--;
    21         }
    22         c[i]=a[i]-b[i];
    23     }
    24     while(c[xa]==0&&xa>1) xa--;
    25     for(int i=xa;i>=1;i--) cout<<c[i];
    26     return 0;
    27 }

    高精乘(HAM)【模板】

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 string x,y;
     4 int a[100010],b[100010],c[200010],xa,xb,xc;
     5 /*数组大小根据题目数据范围大小确定
     6   此模板只适用于0≤x,y≤10^(10^5)的情况*/
     7 int main(){
     8     cin>>x>>y;
     9     xa=x.length(),xb=y.length();
    10     xc=xa+xb;
    11     for(int i=0;i<xa;i++) a[xa-i]=x[i]-'0';
    12     for(int i=0;i<xb;i++) b[xb-i]=y[i]-'0';
    13     for(int i=1;i<=xa;i++){
    14         for(int j=1;j<=xb;j++){
    15             c[i+j-1]+=a[i]*b[j];
    16             c[i+j]+=c[i+j-1]/10;
    17             c[i+j-1]%=10;
    18         }
    19     }
    20     while(c[xc]==0&&xc>1) xc--;
    21     for(int i=xc;i>=1;i--) cout<<c[i];
    22     return 0;
    23 }
  • 相关阅读:
    用Vue来实现音乐播放器(10):Scroll组件的抽象和应用
    Vue的生命周期
    用Vue来实现音乐播放器(九):歌单数据接口分析
    Java中StringBuilder和StringBuffer的区别
    StringBuilder类型与String类型相互转换
    List中Add()与AddAll()的区别
    Map集合遍历的四种方式
    Object类型转换为Integer
    web开发中常用到的状态码
    mysql--从不订购的客户
  • 原文地址:https://www.cnblogs.com/integricode26/p/high-accuracy-algorithm-template.html
Copyright © 2011-2022 走看看