题目: 输入两个正整数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;
}
二进制加法实现及转换
该博客介绍了一个计算两个正整数二进制加法的问题,通过将输入的十进制数转换为二进制,按照二进制加法规则进行运算,并将结果转换回十进制输出。解决方案涉及在数组中处理二进制位,处理不同长度的二进制数,以及使用C语言的库函数完成十进制转换。
1843

被折叠的 条评论
为什么被折叠?



