二进制

 

 

 

 

 

 

 1 #include<iostream>
 2 #include<string>
 3 #include<stack>
 4 #include<cmath>
 5 using namespace std;
 6 int getn(char x){
 7     if(x>='0'&&x<='9')    
 8     return x-'0';
 9     else
10     return x-'A'+10;
11 }
12 char getc(int x){
13     if(x<=9)    
14     return x+'0';
15     else
16     return x+'A'-10;
17 }
18 string f102x(int temp,int t){
19     string r;
20          if(temp==0){
21           r="0";
22          }    
23         while(temp){
24            r=getc(temp%t)+r;
25             temp/=t;
26         }
27 return r;
28 }
29 int x210(string x,int f){
30     int temp=0;
31     for(int i=0;i<x.length();i++){
32     temp=temp*f+getn(x[i]);
33     }
34     return temp;
35 }
36 int main(){
37 int a,b;
38 string ret;
39     while(cin>>a>>b){
40       if(a==0&&b==0break;
41         string x,y,r;
42 
43       x=f102x(a,2);//转为2进制 
44       y=f102x(b,2);//
45       int l=x.length()>y.length()?x.length():y.length();//取较长数字的长度 
46       bool xd=x.length()>y.length();//是不是x比较长 
47       int k=y.length()-x.length();//两个长度的差 
48       k=abs(k);//取个绝对值 
49       if(xd)//短的那个在前面补空格 
50           for(int i=0;i<k;i++)
51              y=" "+y;
52       else
53            for(int i=0;i<k;i++){
54              x=" "+x;
55          }    
56          //补空格完成 
57       for(int i=0;i<l;i++){
58           if(x[i]==' ')//如果x是空格,就证明y长,就用y的数 
59                r+=y[i];
60           else if(y[i]==' ')//反之用x的 
61                r+=x[i];
62           else if(y[i]=='1'&&x[i]=='1')//全1才1 
63                r+='1';
64           else r+='0';//其它就是0 
65       }
66       
67      cout<<x210(r,2)<<endl;
68      
69     }
70 }

 

 

 

 

 

你们现在都知道把十进制转如何转换成二进制了,现在要考考你们的学习成果了。
现在给你们两个十位数,先将它们转换成二进制,然后将两个数对应位上逻辑相加(1+1=1,1+0=0,0+0=0,0+1=0)。
然后输出逻辑相加后的二进制数转换成十进制数出。
例: 十进制 10 6
二进制 1010 110
逻辑相加后 1010
转换成十进制 10


输入:
输入两个整数M,N(N,M<=10000),(M==0,N==0,Game Over).


输出:
输入逻辑相加后的十位数。


样例输入:
10 6
10 10
10 11
0 0

样例输出:
10
10
10

posted @ 2008-07-26 13:44  tiny羊  阅读(244)  评论(0)    收藏  举报