Данная программа обрабатывает почти все случаи, за исключением чисел с экспоненциальной записью. Например, если ввести 2e+108, выводит "гриба"

Хотя должно выводить "грибов". Также, если ввести 2e-108 или любое число меньше единицы, программа не будет его обрабатывать. Как работать с мантиссой так, чтобы выводилось правильное окончание слова "гриб"?

Для дробного числа К напечатать фразу "мы нашли К грибов в лесу", согласовав окончание слова "гриб" с числом К.

#include iostream>

int main()
{
    setlocale(LC_ALL, "ru");
    double K;
    std::cout << "Введите кол-во грибов" << std::endl;
    std::cin >> K;
    if (K < 0) std::cout << "Ты где грибы потерял-то?" << std::endl;
    else if (K == 0) std::cout << "Ты ничего не нашел" << std::endl;
    else
    {
        if (K == 1) std::cout << "Мы нашли 1 гриб в лесу" << std::endl;
        else if (K >= 2 && K <= 4) std::cout << "Мы нашли " << K << " гриба в лесу" << std::endl;
        else if (K > 4 && K <= 20) std::cout << "Мы нашли " << K << " грибов в лесу" << std::endl;
        else if (fmod(K, 10) > 4 && fmod(K, 10) < 10) std::cout << "Мы нашли " << K << " грибов в лесу" << std::endl;
        else if (fmod(K, 10) > 1 && fmod(K, 10) < 5) std::cout << "Мы нашли " << K << " гриба в лесу" << std::endl;
        else if (fmod(K, 100) == 1) std::cout << "Мы нашли " << K << " гриб в лесу" << std::endl;
        else if (fmod(K, 100) == 11) std::cout << "Мы нашли " << K << " грибов в лесу" << std::endl;
        else if (fmod(K, 10) == 0) std::cout << "Мы нашли " << K << " грибов в лесу" << std::endl;
    }

    return 0;

}

Ответы (1 шт):

Автор решения: Mikhailo

Я бы дописал так:

else if (K > 4 && K <= 20) std::cout << "Мы нашли " << K << " грибов в лесу" << std::endl;
else if (K + 10 == K) std::cout << "Мы нашли " << K << " грибов в лесу" << std::endl;
else if (fmod(K, 10) > 4 && fmod(K, 10) < 10) std::cout << "Мы нашли " << K << " грибов в лесу" << std::endl;

Но лучше собрать все условия для одной фразы в одном месте.

→ Ссылка