Не работает программа которая xor - ит 2 числа в 2-ичной системе
Написал алгоритм для того, чтобы узнать и вывести xor двух двоичных чисел, и чтобы нулей в начале результата небыло. В первой строке вводяться разряды чисел, в остальных двух сами двоичные числа. Написал алгоритм, но он работает не полностью, проходит только четверть проверок. Сам проверял с многими данными, и он работает, так же учёл случай, когда n < m, но всёровно проверки не проходит. Сделать перевод в десятичную и делать ^ для двух десятичный и потом перевести результат в двоичную сисетму тоже не вариант, так ка количество символов в двоичной системе может быть 500. Где ошибка ?
#include <iostream>
using namespace std;
int main() {
int n, m;
char b;
cin >> n >> m;
int* mass1 = new int[n];
int* mass2 = new int[m];
int k = min(n, m);
int* mass3 = new int[k];
for (int i = 0; i < n; i++)
{
cin >> b;
if (b == '1') mass1[i] = 1;
else mass1[i] = 0;
}
for (int i = 0; i < m; i++)
{
cin >> b;
if (b == '1') mass2[i] = 1;
else mass2[i] = 0;
}
int f = 0;
if (n > m)
{
for (int i = 0; i < k; i++)
{
mass3[i] = mass1[i + abs(n - m)] ^ mass2[i];
if (mass3[i] == 0) f++;
}
}
else
{
for (int i = 0; i < k; i++)
{
mass3[i] = mass2[i + abs(n - m)] ^ mass1[i];
if (mass3[i] == 0) f++;
}
}
if (f == k) cout << 0;
else
{
for (int i = 0; i < k; i++)
{
if (mass3[i] == 1)
{
for (i; i < k; i++)
{
cout << mass3[i];
}
}
}
}
}
Ответы (1 шт):
Непонятно, зачем вообще n и m, если они вычисляются из строк... но попробуйте так:
int main()
{
unsigned int n, m;
string a, b;
cin >> n >> m >> a >> b;
if (n < m) for(unsigned int i = 0; i < m-n; ++i) a = '0' + a;
else if (n > m) for(unsigned int i = 0; i < n-m; ++i) b = '0' + b;
for(unsigned int i = 0; i < a.size(); ++i)
a[i] = (a[i]-b[i]) ? '1' : '0';
if (auto pos = a.find('1'); pos == a.npos) cout << "0\n";
else cout << a.substr(pos) << endl;
}