算法笔记之:大整数的四则运算

带来《算法笔记》第五章:

大整数的四则运算

#include<cstdio>
#include<cstring>


struct bign{
    
    int d[1000];
    int len;
    bign(){
        
        memset(d,0,sizeof(d));
        len=0;
    }
    
    
}

bign change(char str[]){
    bign a;
    a.len=strlen(str);
    for(int i=0;i<a.len;i++){
        a.d[i]=str[a.len-i-1]-'0';
        
    }
    return a; 
    
}

int compare(bign a,bign b){
    if(a.len>b.len) return 1;
    else if(a.len<b.len) return 
    else {
        for(int i=a.len-1;i>=0;i--){
            
            if(a.d[i]>b.d[i]) return 1;
            else if(a.d[i]<b.d[i]) return -1;
            
        }
        
        return 0;
    }
bign add(bign a,bign b){
    bign c;
    
    for(int i=0;i<a.len||b.len;i++){
        int temp=a.d[i]+b.d[i]+jwei;
         c.d[c.len++]=temp%10;  jwei=c/10;
    }
    if(jwei!=0){
        c.d[c.len++]=jwei;
    }//多出来的最后一次的进位 
    
    return c;
}    

bign sub(bign a,bign b){
    bign c;
    for(int i=0;i<a.len||i<b.len;i++){
        if(  a.d[i]<b.d[i]){
         
         
          a.d[i+1]--;
           a.d[i]+=10;
    }
     c.d[c.len++]=a.d[i]-b.d[i];
}

    while(c.len-1>=1&&c.d[c.len-1]==0){
        c.len--;
        
    }//如果最高位结果为0,则省略
    return c;
    
}
bign multi(bign a,bign b){
for(int i=0;i<a.len;i++){
  int temp=a.d[i]*b+jwei;
  c.d[c.len++]=temp%10;
  jwei=temp/10;
    }
    
    while(jwei!=0){
        c.d[c.len++]=jwei%10;
        jwei/=10;
        
    }
    return c;
    
}
bign divide(bign a,bign b){
    bign c;
    c.len=a.len;
   for(int i=a.len-1;i>=0;i--){
       r=r*10+a.d[i];
      if (r<b) c.d[i]=0;
      else { 
          c.d[i]=r/b;
          r=r%b;
      }
   } 
    while(c.d[len-1]==0&&c.len-1>=1){
        c.len--;
        
    }
}
int main(){
 char str1[1000],str2[1000];
 scanf("%s%s",&str1,&str2);
 bign a=change(str1);
 bign b=change(str2);
 printf(add(a,b));
 return 0;
    
}

猜你喜欢

转载自blog.csdn.net/qq_24572475/article/details/80249029
今日推荐