Данная программа обрабатывает почти все случаи, за исключением чисел с экспоненциальной записью. Например, если ввести 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;
Но лучше собрать все условия для одной фразы в одном месте.