二进制?十进制!

题目链接:https://ac.nowcoder.com/acm/problem/218048

方法一:数组

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a, b;
 4 long long aa, bb;
 5 int  ejza[20], ejzb[20];
 6 int main()
 7 {
 8     cin>>a>>b;
 9     //求a的二进制数
10     int ai=0;
11     while(a)
12     {
13         ejza[ai]=a%2;
14         ai++;
15         a/=2;
16     }
17     for(int i=ai-1; i>=0; i--)
18         aa=aa*10+ejza[i];
19      //求b的二进制数
20     int bi=0;
21     while(b)
22     {
23         ejzb[bi]=b%2;
24         bi++;
25         b/=2;
26     }
27     for(int i=bi-1; i>=0; i--)
28         bb=bb*10+ejzb[i];
29     //求和
30     cout<<aa+bb;
31     return 0;
32 }

方法二:位运算

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a, b;
 4 long long aa, bb;
 5 int main()
 6 {
 7     cin>>a>>b;
 8     for(int i=15; i>=0; i--)//因为1<=A,B<=32768
 9     {
10         aa = aa * 10 + ( ( a&(1<<i) ) != 0);
11         bb = bb * 10 + ( ( b&(1<<i) ) != 0);
12     }
13     cout<<aa+bb;
14     return 0;
15 }

方法三:函数(递归)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a, b;
 4 
 5 long long ejz(int x)//递归求x的二进制的十进制表示 
 6 {
 7     int sh=x/2;
 8     int ys=x%2;
 9     if(sh == 0)
10         return ys;
11     else
12         return 10*ejz(sh)+ys;
13 } 
14 int main()
15 {
16     cin>>a>>b;
17     cout<<ejz(a)+ejz(b);
18     return 0;
19 }

 

posted @ 2022-03-12 22:13  TFLSNOI  阅读(58)  评论(0编辑  收藏  举报