概述
题目: 输入两个正整数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;
}
#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;
}
最后
以上就是健壮龙猫为你收集整理的二进制加法的全部内容,希望文章能够帮你解决二进制加法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复