模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!=0) return 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);
}
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮