现在的位置: 首页 > 综合 > 正文

C++入门练习 76题(8)

2013年01月18日 ⁄ 综合 ⁄ 共 1021字 ⁄ 字号 评论关闭

8. 输入两个正整数X,Y,将X,Y化为二进制数,然后将这两个二进制数作二进
  制加法运算,再将结果化为十进制数输出。

 

这一题出的感觉莫名其妙, 因为在计算机中, 不管十进制还是八进制二进制十六进制, 都是以二进制表示的, 转不转换都是一样的, 直接:

int main()
{
  
int m,n;
 cin
>>m>>n;
 cour
<<m+n;
 
return 0;
}

即可~!

 

不过我揣摩出题的人应该是想把整数用二进制取模的方法转到一个数组中, 然后再做0 1运算, 那么我也写了一个小程序:

 

//-----------------
// freshui
// 05-28 2007
//----------------
#include <iostream>
using namespace std;

int trans_binary(char *num, int k);
int main()
{
  
char num1[32]={0};  //存储二进制数据的数组
  char num2[32]={0};  //
  char result[32]={0};//存储结果
  char carry=0;   //进位标志
  int int_result=0//为显示而设的变量

  
int m,n;
  cin
>>m>>n;
  
//转换成二进制
  trans_binary(num1, m);
  trans_binary(num2, n);

  
//计算两个二进制加法
  for(int i=0; i<32; i++)
  
{
    result[i]
=(num1[i]+num2[i]+carry)%2;
    carry 
= (num1[i]+num2[i]+carry)/2;
  }


  
//再将二进制合并到一个整形数中, 方便显示
  for ( int i=0; i<32; i++)
  
{
    int_result 
|= result[i]<<i;
  }

  cout
<<int_result<<endl;
  system(
"PAUSE");
  
return 0;
}


int trans_binary(char *num, int k)
{
  
int tmp =k;
  
int cnt=0;
  
while(tmp>0)
  
{
    num[cnt
++= tmp%2;
    tmp 
= tmp/2;
  }

  
return 0;
}

抱歉!评论已关闭.