#include<iostream>
#include<string.h>
using namespace std;
//二进制数的异或
//余数覆盖原本被除数的位置
void strxor(char p[], char m[],int n,int j)
{
int i = 0;
for(i = 0; i < n + 1; i ++)
{
if(m[j] == p[i]) m[j] = '0';
else m[j] = '1';
j ++;
}
}
void div(){
char Q[1000], R[1000];//Q:商 R:余数
char M[1000], P[1000];//M:被除数 P:除数
char result[1000];
cout<<"输入二进制序列和生成多项式(二进制):"<<endl;
cin>>M>>P;
//P的长度为length_P,在M后添加length_P-1个0
int length_M=strlen(M),length_P=strlen(P);
for(int i=length_M;i<length_M+length_P-1;i++){
M[i]='0';
}
M[length_M+length_P-1]='\0';
//判断被除数的最高位,若最高位为1,则商1,否则商0
//将上一次运算得到的余数覆盖原本被除数的位置,然后不断再除
for(int i=length_P-1;i<length_M+length_P-1;i++){
if(M[i-(length_P-1)]=='1'){
strxor(P,M,length_P-1,i-(length_P-1));
Q[i-(length_P-1)]='1';
}
else
{
Q[i-(length_P-1)]='0';
}
}
Q[length_M]='\0';
cout<<"商为:"<<Q<<endl;
int j=0;
for(int i=length_M;i<length_M+length_P-1;i++){
R[j]=M[i];
j++;
}
R[length_P-1]='\0';
cout<<"余数:"<<R<<endl<<endl;
}
int main()
{
div();
return 0;
}