Входные данные:
Первая строка ввода содержит целое число T, обозначающее количество тестовых случаев. Для каждого теста есть два целочисленных входа & б.
Выход:
Для каждого тестового случая вывод представляет собой целое число, отображающее XOR & б после изготовления их равной длины.
Ограничения:
1<= Т<= 100
1<= А, б<= 107
Пример:
Входные данные:
4
2 6
3 10
5 24
1 20
Выход:
2
6
12
4
Объяснение:
1. Двоичное представление 2 равно 10, а 6 — 110. Поскольку длина «10» меньше, поэтому добавьте к нему «0», сделав его «100», чтобы сделать длину двоичных представлений равной. 100 и 110 дает 010, который равен 2.
мой код
#include <iostream>
#include <cmath>
#include <sstream>
#include <cstring>
#include <string>
using namespace std;
int main()
{
int cases, binary[100];
cin>>cases;
int *result = new int[cases];
int j;
for(j=0; j<cases; j++){
stringstream ss[3];
for(int k=0; k<2; k++)
{
int n;
cin>>n;
int temp=n, i=0, len;
while(temp > 0){
binary[i] = temp%2;
temp /= 2;
i++;
}
len = i;
string str ;
for(int i=0; i<len; ++i){
stringstream ss;
ss << binary[(len-1)-i];
str += ss.str() ;
}
ss[k] << str;
}
string str1 = ss[0].str(), str2 = ss[1].str();
int len = (str1.length() > str2.length()) ? str1.length() : str2.length() ;
if(str1.length() < (unsigned)len){
int diff = len - str1.length();
for(int i=0; i<diff; ++i){
str1 += '0';
}
}
else if(str2.length() < (unsigned)len){
int diff = len - str2.length();
for(int i=0; i<diff; ++i){
str2 += '0';
}
}
string str3 = str1;
for(int i=0; i<len; ++i){
if(str1[i]==str2[i]){
str3[i]='0';
}else str3[i]='1';
}
int length = str3.length(), val=0;
for(int i=0, m=length-1; i<length, m>=0; ++i,--m){
if(str3[i] == '1'){
val += pow(2, m);
}
}
result[j] = val;
}
for(int i=0; i<cases; i++){
cout<<result[i]<<endl;
}
return 0;
}
я думаю, что я сделал это более длинным и сложным, как сделать это простым и кратким.
#include <iostream>
using namespace std;
int main() {
unsigned T;
cin >> T;
unsigned a, b;
for (unsigned i=0; i<T; ++i) {
cin >> a >> b;
if (a < b)
swap(a, b);
unsigned shift = 0;
if (a > b) {
while(!(a & 0x40)) {
a <<= 1;
b <<= 1;
++shift;
}
while(!(b & 0x40))
b <<= 1;
}
cout << ((a ^ b) >> shift) << ' ';
}
return 0;
}
И некоторые объяснения:
Других решений пока нет …