代码如下
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# define MAX_LENGTH 30
void bin_plus ( int * A, int * B, int len) ;
void bin_print ( int * b, int len, char c, int loc) ;
void bin_right ( int * b, int len) ;
int main ( void )
{
int ACC[ MAX_LENGTH] = { 0 } ;
int MQ[ MAX_LENGTH] = { 0 } ;
int X[ MAX_LENGTH] = { 0 } ;
int Negative_X[ MAX_LENGTH] = { 0 } ;
int Zero[ MAX_LENGTH] = { 0 } ;
char str_X[ MAX_LENGTH] = "110011" ;
char str_Y[ MAX_LENGTH] = "010110" ;
int len = strlen ( str_X) ;
for ( int i= 0 ; i < len; i++ )
MQ[ i] = str_Y[ i] - '0' ;
for ( int i= 0 ; i < len; i++ )
X[ i] = str_X[ i] - '0' ;
bool flag = false ;
for ( int i= len- 1 ; i>= 0 ; i-- )
{
if ( flag)
Negative_X[ i] = ! X[ i] ;
else
Negative_X[ i] = X[ i] ;
if ( X[ i] == 1 )
flag = true ;
}
for ( int i= 0 ; i < len- 1 ; i++ )
{
bin_print ( ACC, len, '\t' , len- 1 ) ;
bin_print ( MQ, len, '\n' , len- 1 ) ;
int * add_num;
switch ( MQ[ len- 1 ] - MQ[ len- 2 ] )
{
case - 1 :
add_num = Negative_X;
break ;
case 0 :
add_num = Zero;
break ;
case 1 :
add_num = X;
break ;
default :
break ;
}
bin_print ( add_num, len, '\n' , len- 1 ) ;
bin_plus ( ACC, add_num, len) ;
printf ( "-------------------------\n" ) ;
bin_print ( ACC, len, '\n' , len- 1 ) ;
if ( i != len- 2 )
{
bin_right ( MQ, len) ;
MQ[ 0 ] = ACC[ len- 1 ] ;
bin_right ( ACC, len) ;
}
printf ( "\n" ) ;
}
printf ( "Answer: " ) ;
bin_print ( ACC, len, ' ' , len- 1 ) ;
bin_print ( MQ, len- 2 , '\n' , len- 1 ) ;
return 0 ;
}
void bin_plus ( int * A, int * B, int len)
{
int CF = 0 ;
for ( int i = len- 1 ; i >= 0 ; i-- )
{
int temp = ( A[ i] & B[ i] ) | ( ( A[ i] ^ B[ i] ) & CF) ;
A[ i] = A[ i] ^ B[ i] ^ CF;
CF = temp;
}
return ;
}
void bin_print ( int * b, int len, char c, int loc)
{
for ( int i = 0 ; i < len; i++ )
{
printf ( "%d" , b[ i] ) ;
if ( i == loc)
printf ( "%c" , c) ;
else
printf ( " " ) ;
}
return ;
}
void bin_right ( int * b, int len)
{
for ( int i = len- 1 ; i > 0 ; i-- )
b[ i] = b[ i- 1 ] ;
b[ 0 ] = b[ 1 ] ;
return ;
}