Если 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));
→ Ссылка