二进制加法

    技术2022-05-11  106

    题目: 输入两个正整数X,Y,将X,Y化为二进制数,然后将这两个二进制数作二进制加法运算,再将结化为十进制数输出。  (二进制加法规则:0+0=0    0+1=1    1+0=1    1+1=10 )

    提示:在数组里运算。

    思路:先将输入的数转成二进制,此时数是倒着排的即二进制的最低位在x[0],我们打印的时候把它正过来;做加法时模拟二进制加法规则,再考虑进位,这里我用的while循环,循环退出的条件是两个数都加完且最高位无进位。如果有一个数位数较少先加完了,那么我们把这个数高位补0。最后化成10进制时用的pow函数是C语言的库函数,你们自己查一下。

    #include  < iostream > #include  < cmath > using   namespace  std; int  Convert( long , char * ); void  Display( char * , int ); int  Plus( char * , int , char * , int , char * ); long  ToDecimal( char * , int ); int  main(){     long  x,y;    cout << " Input the first number: " ;    cin >> x;    cout << " Input the second number: " ;    cin >> y;     char  xbin[ 50 ],ybin[ 50 ];     int  xbin_len,ybin_len;    xbin_len = Convert(x,xbin);    ybin_len = Convert(y,ybin);    Display(xbin,xbin_len);    Display(ybin,ybin_len);     char  result[ 50 ];     int  result_len = Plus(xbin,xbin_len,ybin,ybin_len,result);    Display(result,result_len);     long  answer = ToDecimal(result,result_len);    cout << " The answer is  " << answer << endl;} int  Convert( long  x, char *  a){     int  i = 0 ;     while ( ! (x < 2 ))    {           int  residual = x % 2 ;         a[i] = residual + 48 ;          i ++ ;          x = x / 2 ;     }     a[i] = x + 48 ;      return  i + 1 ;} void  Display( char *  a, int  len){     for ( int  i = len - 1 ;i >= 0 ;i -- )        cout << a[i];    cout << endl;} int  Plus( char *  x, int  xlen, char *  y, int  ylen, char *  result){     int  i = 0 ,jw = 0 ;     bool  flag = 3 ;     do     {         if (i >= xlen)            x[i] = 48 ;         if (i >= ylen)            y[i] = 48 ;         if (flag = (i >= xlen) && (i >= ylen) && (jw == 0 ))             break ;         int  bw = x[i] - 48 + y[i] - 48 + jw;         switch (bw)        {             case   0 :                jw = 0 ;                 break ;             case   1 :                jw = 0 ;                 break ;             case   2 :                bw = 0 ;                jw = 1 ;                 break ;             case   3 :                bw = 1 ;                jw = 1 ;                 break ;        }        result[i] = bw + 48 ;        i ++ ;    } while ( 1 );     return  i;} long  ToDecimal( char *  a, int  len){     long  d = 0 ;     for ( int  i = 0 ;i < len;i ++ )        d += (a[i] - 48 ) * ( int )pow( 2.0 ,i);     return  d;}

    最新回复(0)