大数定律

数据结构

struct arr{
    int len;
    int a[N];//下标小的是低位,下标大的是高位
    arr(){
        int i;
        for(i=0;i<len;i++)a[i]=0;
    }
};

对于输入的字符串我们要进行处理,变成一个标准的arr数据结构

arr transform(string str){
    arr ans;
    int i;
    ans.len=str.length();
    for(i=0;i<ans.len;i++){
        ans.a[i]=str[ans.len-i-1]-'0';
    }
    return ans;
}

1.大数加

arr add(arr a,arr b){
    arr ans;
    int i;
    ans.len=min(a.len,b.len);
    for(i=0;i<ans.len;i++) {
        ans.a[i] += a.a[i] + b.a[i];
        ans.a[i + 1] += ans.a[i] / 10;
        ans.a[i] = ans.a[i] % 10;
    }
    if(ans.a[ans.len]>0)ans.len++;
    return ans;
}

2.大数减

arr sub(arr a,arr b){
   arr ans;
   int i;
   ans.len=a.len;
   for(i=0;i<a.len;i++){
       ans.a[i]=a.a[i]-b.a[i];
       if(ans.a[i]<0)ans.a[i]+=10,a.a[i+1]--;
   }
   i=ans.len;
   while(i-1>=0&&ans.a[i-1]==0)i--,ans.len--;
   return ans;
}

3.大数乘

arr mutiply(arr a,arr b){
    int i,j;
    arr ans;
    ans.len=a.len+b.len-1;
    for(i=0;i<a.len;i++){
        for(j=0;j<b.len;j++){
            ans.a[i+j]+=a.a[i]*b.a[j];
            ans.a[i+j+1]+=ans.a[i+j]/10;
            ans.a[i+j]=ans.a[i+j]%10;
        }
    }
    if(ans.a[ans.len]>0)ans.len++;
    return ans;
}

 

 

posted @ 2020-11-03 15:40  金龙喩  阅读(84)  评论(0)    收藏  举报