Задача
Заданы два натуральных числа $a$ и $b$. Проверьте, делится ли $a$ на $b$.
Входные данные: Два натуральных числа $a$ и $b$ $(1 \le a, b \le 10^9)$
Выходные данные: Если $a$ не делится на $b$ нацело, вывести в одной строке частное и остаток от деления $a$ на $b$. Иначе вывести "Divisible".
Тесты
$a$ | $b$ | Вывод программы |
15 | 3 | Divisible |
12 | 7 | 1 5 |
15 | 23 | 0 15 |
1000000000 | 889879 | 1123 665883 |
Решение
Для вычисления неполного частного и остатка от деления воспользуемся встроенными в язык операторами / и % соответственно.
Код (Ветвления)
Типа данных int по заданным в условии ограничениям хватит для реализации.
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <iostream> int main() { int a, b; scanf("%d %d", &a, &b); int r = a % b; if(r == 0) printf("Divisible\n"); else printf("%d %d\n", a / b, r); return 0; } |
Код (Линейные вычисления)
Для решения задачи без условных операторов будем использовать следующий костыль трюк: при вычислении логических операций C++ проводит оптимизацию. Таким образом если в операции «И» первый аргумент уже
false, то следующий аргумент даже не вычисляется.
1 2 3 4 5 6 7 8 9 10 |
#include <iostream> int main() { int a, b; scanf("%d %d", &a, &b); int r = a % b; !r && printf("Divisible\n"); r && printf("%d %d\n", a / b, r); return 0; } |
Ссылки
Задача на E-Olymp
Код на IdeOne (Ветвления)
Код на IdeOne (Линейные вычисления)
Засчитанное решение на E-Olymp
Определитесь, либо std::cin и std::cout, либо scanf() и printf(). Не стоит перемешивать эти два подхода в одной короткой программе.
Спасибо за подсказку! Исправил.
Хорошо. Зачтено.
Теперь нужно придумать какой-то трюк, чтобы сделать ещё один вариант кода в котором формально не используется условный оператор или тернарная операция.
Такой трюк уж очень громоздкий. Подумайте еще, пожалуйста.
Подумал. Придумал. Исправил)