Если m % n == k или m % n == l, то вывести 1, иначе любое другое число
На вход программе подаются 4 целых числа, по модулю не превосходящие 10^6: m,n,k,l. Если остаток от деления m на n равен k или l, то выведите 1, в противном случае - любое другое число. Условный оператор использовать нельзя!
Я написал такой код:
#include <iostream>
using namespace std;
int main()
{
int m, n, k, l;
cin >> m >> n >> k >> l;
cout << ((1 / (((m % (n + 1 / (n + 1))) - k) * ((m % (n + 1 / (n + 1))) - k) + 1)) - 1) * ((1 / (((m % (n + 1 / (n + 1))) - l) * ((m % (n + 1 / (n + 1))) - l) + 1)) - 1) + 1;
return 0;
}
Но он проходит только 11 тестов из 13. Я сам заметил, что на случае 0, 0, 0, 0 код выдaёт 1, хотя не должен. Покажите, пожалуйста, как мне изменить код.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Ну, раз % можно, а делить на 0 — нет, то воспользуемся сокращенным вычислением логического выражения...
int main()
{
int n, m, k, l;
cin >> m >> n >> k >> l;
cout << (n && (m%n-l)*(m%n-k) == 0);
}
Можно и отдельно проверять на равенство:
cout << (n && (m%n == l || m%n == k));