高精度

高精加

复制代码
void jia(int a[],int b[]){
    c[0]=1;int d=0;
    while(c[0]<=a[0]||c[0]<=b[0]){
        //cout<<c[c[0]]<<endl; 
        c[c[0]]=a[c[0]]+b[c[0]]+d;
        d=c[c[0]]/10;c[c[0]]%=10;c[0]++;
    }if(d)c[c[0]]=d;
    else  c[0]--; 
    for(int i=0;i<=c[0];++i)  a[i]=c[i];
}
复制代码

高精减

复制代码
void jian(int a[],int b[]){
    d[0]=1;
    while(d[0]<=a[0]||d[0]<=b[0]){
        if(a[d[0]]<b[d[0]]){
            a[d[0]]+=10;
            a[d[0]+1]--;
        }d[d[0]]=a[d[0]]-b[d[0]];
        d[0]++;
    }d[0]--;
    while(d[0]>1&&!d[d[0]])  d[0]--;
}
复制代码

 

高精乘

高精乘低精

a*=b;

复制代码
void mul(int a[],int b){
    int c=0;
    for(int i=1;i<=a[0];i++){
        a[i]=a[i]*b+c;
        c=a[i]/10;a[i]%=10;
    }
    while(c!=0){
        a[++a[0]]=c;c=a[a[0]]/10;
        a[a[0]]%=10;
    }
}
复制代码

c=a*b

复制代码
void mul(int x[],int y){
    memset(c,0,sizeof(c));
    for(int i=1;i<=x[0];++i){
        int k=i;
        c[i]+=x[i]*y;
        while(c[k]>=10){
            c[k+1]+=c[k]/10;
            c[k++]%=10;
        }if(k>c[0])  c[0]=k;
    }while(!c[c[0]]&&c[0]>1)  --c[0];
    for(int i=0;i<=c[0];++i)  a[i]=c[i];
}
复制代码

高精乘高精

复制代码
void cheng(int a[],int b[]){
    memset(e,0,sizeof(e));
    for(int i=1;i<=a[0];i++){
        int d=0;
        for(int j=1;j<=b[0];j++){
            e[i+j-1]+=a[i]*b[j]+d;
            d=e[i+j-1]/10;e[i+j-1]%=10;
        }e[i+b[0]]=d;
    }e[0]=a[0]+b[0];
    while(e[0]>1&&!e[e[0]])  e[0]--;
}
View Code
复制代码

 

高精除

保留被除数

复制代码
inline bool greater_eq(int a[], int b[], int last_dg, int len) {
      if (a[last_dg + len] != 0) return true;
      for (int i = len - 1; i >= 0; --i) {
        if (a[last_dg + i] > b[i]) return true;
        if (a[last_dg + i] < b[i]) return false;
      }
      return true;
}

void div(int a[],int b[],int d[]){
  for(int i=0; i<=a[0];++i) d[i]=a[i];
  for(int i=a[0]-b[0]+1;i>0;--i)
    while(greater_eq(d,b,i,b[0]))
      for (int j=1;j<=b[0];++j){
        d[i+j]-=b[j];
        if(d[i+j]<0)d[i+j+1]-=1,d[i+j]+=10;
      }
  while(d[0]>0&&d[d[0]]==0) d[0]--;
}

复制代码

不保留

复制代码
void J(int a[],int b[]){
    if(!C(a,b)){a[0]=0;return;}
    for(int i=1;i<=a[0];++i){
        if(a[i]<b[i]){a[i+1]--;a[i]+=10;}
        a[i]-=b[i];
    }while(a[0]>0&&!a[a[0]])  a[0]--;
}
int C(int a[],itn b[]){
    if(a[0]>b[0])  return 1;
    if(a[0]<b[0])  return -1;
    for(int i=a[0];i;--i){
        if(a[i]>b[i])  return 1;
        if(a[i]<b[i])  return -1; 
    }return 0;
}
void B(int a[],int b[],int d){
    for(int i=1;i<=a[0];++i)  b[i+d-1]=a[i];
    b[0]=a[0]+d-1;
}
int main(){
    c[0]=a[0]-b[0]+1;
    for(int i=c[0];i;--i){
        int t[220];
        B(y,t,i);
        while(C(a,t)>=0)  c[i]++,J(a,t);
    }while(c[0]>0&&!c[c[0]])  c[0]--;
}
View Code
复制代码

 

posted @   yisiwunian  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示