Проблем с overflow при INFINITY
Здравейте, задача от C++ фундаментъл курса.
Task 5 – Min and Max
Write a program that reads an integer number N, then a line of N integers, and prints the minimum and maximum of those integers
https://judge.softuni.bg/Contests/Compete/Index/2939#4
Ясно е че задачката си има няколко лесни решения. Реших обаче да "резна' малко едно от тези решения.
#include <iostream>
#include <cstdint>
int main() {
int num;
int min = INT32_MAX, max = INT32_MIN;
std::cin >> num;
for (int i = 0; i < num; i++) {
int currNumber = 0;
std::cin >> currNumber;
if (currNumber < min) {
min = currNumber;
} else if (currNumber > max) {
max = currNumber;
}
}
std::cout << min << " " << max << std::endl;
return 0;
}
И при някои определени комбинации от вход, получавам overflow, например:
Вход:
2
5 -1
Изход:
-1 -2147483648
И това е така, независимо дали ще ползвам INFINITY, INT_MAX, INT32_MAX.
Разбира се, с един if(i == 0){ ... - вътре във loop-a тоя проблем се отстранява, но пък се обезсмисля, че по-горе се дава стойност безкрайност.
Въпроса ми е: Има ли вариант при който "безопасно" да се ползва INFINITY или INT_MAX или INT32_MAX или друго подобно, и да няма изненади като overflow?
:-) да, тоя else ми счупи главата - много тъпа грешка....