Всем привет!
Есть такая задача
https://acmp.ru/asp/do/index.asp?main=task&id_course=1&id_section=4&id_topic=39&id_problem=246
Я пока что пытаюсь справиться с ситуацией когда размеры одинаковые и при этом метод atoi не хочет работать. Как обойти ошибку?
Мой код:
#include
#include
using namespace std;
int main()
{
string number1, number2, number3;
cin >> number1 >> number2 >> number3;
if (number1.size() == number2.size() == number3.size())
{
for (int i = 0; i < number1.size(); i++)
{
if (atoi(number1[i].c_str()) > number2[i] >> number3[i] || number1[i] > number3[i] > number2[i])
{
cout << number1[i];
return 0;
}
if (number2[i] > number3[i] >> number1[i] || number2[i] > number1[i] > number3[i])
{
cout << number2[i];
return 0;
}
if (number3[i] > number2[i] >> number1[i] || number3[i] > number1[i] > number2[i]);
{
cout << number3[i];
return 0;
}
}
}
/*if (number1.size() > number2.size() > number3.size())
{
cout << number1;
return 0;
}
if (number2.size() > number1.size() > number3.size())
{
cout << number2;
return 0;
}
if (number3.size() > number1.size() > number2.size())
{
cout << number3;
return 0;
}*/
return 0;
}

А что тут делает оператор >>?
Попробуйте без двойных неравенств, с простыми.
Функция atoi, как я понимаю, тут не нужна.
Можно просто сравнивать символы при помощи < и >.
Вот так:
if (number1[i] > number2[i] && number1[i] > number3[i]) …
И смотрите внимательно, чтобы после if () не было точки с запятой, иначе по условию будет выполняться точка с запятой, а остальное безусловно.
Всё намного проще:
string a, b, c;
cin >> a >> b >> c;
if (a.length() > b.length() || a.length() == b.length() && a > b) { b = a; } // b = max(a, b)
cout << (b.length() > c.length() || b.length() == c.length() && b > c? b : c);
Для натуральных чисел:
Если длина строковой записи числа a больше длины строковой записи числа b, число a заведомо больше числа b.
Если длины строковых записей чисел равны, результат сравнения строк совпадает с результатом сравнения чисел.
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Number {
string value;
Number() = default;
friend bool operator<(const Number& a, const Number& b) {
if (a.value.length() == b.value.length()) return a.value < b.value;
return a.value.length() < b.value.length();
}
friend bool operator==(const Number& a, const Number& b) {
return a.value == b.value;
}
friend bool operator>(const Number& a, const Number& b) {
return !(a < b || a == b);
}
friend istream& operator>>(istream& inp, Number& num) {
return inp >> num.value;
}
friend ostream& operator<<(ostream& out, const Number& num) {
return out << num.value;
}
};
Number max(vector<Number>& box) {
sort(box.begin(), box.end(), greater<>());
return box.front();
}
int main() {
vector<Number> box(3);
for (auto& x : box) cin >> x;
cout << max(box) << '\n';
system("pause > nul");
}