给定两个十进制整数 : AAA,BBB
你需要把它们的二进制形式以十进制的运算法则相加输出结果。
例如:
A=3,B=2A = 3 , B = 2A=3,B=2 的时候,AAA 的二进制表示是 : 111111 , BBB 的二进制表示是 101010 ,你需要输出答案为 : 212121
输入描述:
一行两个十进制整数: AAA,BBB
输出描述:
一行一个整数,表示相加的结果。
示例1
输入
复制2 3
2 3
输出
复制21
21
示例2
输入
复制5 4
5 4
输出
复制201
201
备注:
对于 100100100 % 的数据:
1<=A,B<=327681 <= A,B <= 327681<=A,B<=32768
关于一个十进制数如何转化为二进制:
将十进制数每次除以 222 ,取余数,直到这个数变为0,最后将得到的余数反向记录就是原十进制数的二进制形式。
例子:
1
2
3
4
10-----> 5余下 0
5------> 2余下 1
2------> 1余下 0
1------> 0余下 1
最后得到 101010 的二进制表示就是 101010101010
注意点
其实这个题的思路是不难,多数是会用函数来针对着那个你的二进制转化,如果二进制转化存在问题的话请看我另一篇文章,这里有两种方法。
https://blog.csdn.net/m0_61196970/article/details/125876942?spm=1001.2014.3001.5502http://xn--xcr2u716lwma然后最重要的就是数据的类型,因为看题数据的范围B已经到了32768 所以用long long 不过分
然后我用了 宏定义来用 n 来代替long long 简便输入
#include <iostream>
#define N 1001
using namespace std;
#define n long long
n function(int x);
int arr1[N];
int main()
{
n A, B;
n t, i = 0;
cin >> A >> B;
function(A);
function(B);
cout << function(A) + function(B);
}
n function(int x) {
n i = 0, t = 0;
while (x > 0) {
arr1[i++] = x % 2;
x /= 2;
}
for (--i; i > 0; i--) {
t =t*10 + arr1[i] * 10;
}
t = t + arr1[0];
return t;
}
如果有想法可以在这一起讨论