模2除法(C/C++)

2019-04-13 11:40发布

int div2(int,int)
模2除法,
能除尽则返回商,
除不尽则返回余数   #include <stdio.h>
#include 
<math.h>

#define MAX 32

int convert(int a[],int b,int *n);
int get_length(int a[]);
int get_length_i(int a);
int mydiv(int a[],int b[],int na,int nb);
int make_num(int x,int y);
int div2(int x,int y);

int main(int argc, char* argv[])
{
    printf(
"%d ",div2(75,6));
    
return 0;
}


int div2(int x,int y)
{
    
int a[MAX],b[MAX],na,nb;
    convert(a,x,
&na);
    convert(b,y,
&nb);
    
return mydiv(a,b,na,nb);
}


int convert(int a[],int b,int *n)
{
    
for(int i=0;i<MAX;i++{
        a[i]
= (b&(1<<i))>>i;
    }

    
*n=get_length(a);
    
return *n;
}


int get_length(int a[])
{
    
int l=0;
    
for(int i=0;i<MAX;i++{
        
if(a[i]!=0) l=i;
    }

    
return l+1;
}


int get_length_i(int a)
{
    
int temp_arr[MAX],itemp;
    convert(temp_arr,a,
&itemp);
    
return itemp;
}


int mydiv(int a[],int b[],int na,int nb)
{
    
int p=0,q=0,x[MAX]={0},i,c=0,result=0;
    
for(i=0;i<nb;i++{
        q
+=(b[i]<<i);
    }


    
while(na>=0{
        
while(get_length_i(p)<nb && na>=0{
            
if(na==0 && p!=0return p;
            p
=make_num(p,*(a+na-1));
            na
--;
            x[na]
=0;
        }

        
if(na>=0{
            x[na]
=1;
            p
=q^p;
        }

    }


    c
=get_length(x);
    
for(i=c-1;i>=0;i--{
        result
=make_num(result,x[i]);
    }

    
return result;
}


int make_num(int x,int y)
{
    
return ((x<<1)|y);
}