模2除法(C/C++)

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);
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值