C/C++

Ребят всех с новым 2021) Помогите изменить код своим ревью. Я по крайне мере его изучу и пойму как работает всё)

Напишите программу, которая запрашивает две строки, представляющие собой двоичные числа, и выводит в первой строке большее из них, а во второй строке -- меньшее. Числа подаются на вход без ведущих нулей. Длина чисел -- не более 1000 разрядов.
Sample Input 1:

1001
1101
Sample Output 1:

1101
1001
Sample Input 2:

100
11
Sample Output 2:

100
11
Sample Input 3:

1
101010111
Sample Output 3:

101010111
1
Напишите программу. Тестируется через stdin → stdout
Верно решили 252 учащихся
Из всех попыток 31% верных
Time Limit: 5 секунд
Memory Limit: 256 MB
#include
#include
using namespace std;
int main() {
std::string v[2],w[2],t;
std::cin >> v[0] >> v[1];
long int a=v[0].length(),
b=v[1].length();
for(long int s=(a>b?a-b:b-a);s--;t+='0');
if(a>b) w[0]=v[0], w[1]=t+v[1];
else (a < b); w[2] != v[2], v[2]=t+v[2];

cout << v[a<b] << "\n" << v[!(a<b)];

return 0;}
если бы это был нормальный код в рабочем репозитории, я бы зареджектил вот за это:
for(long int s=(a>b?a-b:b-a);s--;t+='0');
зачем пихать в шаг цикла изменение какой-то побочной переменной, если можно сделать так? мы же не в код-гольф играем?
for(long int s=(a>b?a-b:b-a);s >= 0; --s) {
t+='0';
}

if(a>b) w[0]=v[0], w[1]=t+v[1];
вот за это я бы тоже пальцы поотрубал
кто вас такому вообще учил? фигурные скобки для кого придумали, какая запятая?

else (a < b); w[2] != v[2], v[2]=t+v[2];
а вот эта хрень вообще непонятно что делает
по сути в else происходит ни на что не влияющее уходяшее в никуда сравнение, потом после if-else ещё одно бесполезное сравнение элементов, которых, кстати, вообще не существует в v и w (выход за границы массива)

короче, код кал, но не просто кал, которое пишут новички, а такое ощущение, что специально писался, чтобы разозлить человека, который его читает
НЕ
Николай Еремин
36 956
Лучший ответ
Георгий Абуладзе    По первому замечанию Вы ой-как правы! Но лучше было сказать, что в этой задаче выравнивание длин вообще не требуется.
string v[2]; // вводимые числа
cin >> v[0] >> v[1];
int lng = a.length(), max = 0; // длина первого числа и индекс максимального числа
if (lng == b.length()) { // если длины чисел равны - сравниваем цифры
for (int i = 0; i < lng; ++i) {
if (v[0][i] == v[1][i]) { continue; } // если цифры совпали - продолжаем сравнение
if (v[0][i] < v[1][i]) { max = 1; } // иначе - выбираем максимальное и выход из цикла
break;
}
} else if (lng < b.length()) { // иначе максимальное - то, что длиннее
max = 1;
}
cout << v[max] << '\n' << v[(max + 1) % 2] << '\n';
Георгий Абуладзе * Комментарии точны и по делу — моё Вам почтение!

* ИМХО: я организовал цикл while, в заголовке объединил два условия (что позволило исключить break), счётчик объявил выше цикла (это позволяет сохранить значение счётчика при выходе из цикла). Конечно, возможны варианты!

*)
    (max + 1) % 2 ≡ 1 - max