我是靠谱客的博主 健壮龙猫,最近开发中收集的这篇文章主要介绍二进制加法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目: 输入两个正整数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;
}

最后

以上就是健壮龙猫为你收集整理的二进制加法的全部内容,希望文章能够帮你解决二进制加法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部