Арифметические операции и вывод в консоль

Элементарные задачи на использование математических операторов в Java. Данные задачи не подразумевают написания каких-то сложных алгоритмов, но требуют от решающего понимания принципов работы операторов, а также последствий выполнения тех или иных операций.

В целом это, конечно, задачи для начинающих. Решения большинства задач сопровождаются подробными комментариями.

Задача 1

Дано целое число. Напишите выражение, которое вычисляет куб этого числа. Результат выведите в консоль.

Пример решения:

int x = 10;
System.out.println(x * x * x); //Выведет 1000

Решение тривиально, как и сама задача.

Задача 2

Используя целочисленные литералы, напишите выражение, суммирующее два числа и умножающее результат на 2. Выведите результат вычислений в консоль.

System.out.println( (2 + 4) * 2 );


Инструкция System.out.println(); отправляет в консоль результат, возвращаемый выражением, расположенным внутри скобок. В данном случае: (2 + 4) * 2. Собственно это выражение и является главной часть решения.

Сперва производится вычисление выражения в скобках, а именно вычисляется сумма двух чисел, а затем полученный результат удваивается.

Разумеется, это формула вычисления периметра прямоугольника.

Задача 3

Напишите код, который позволит получить double значения Infinity, -Infinity и NaN и вывести эти значения на консоль.

System.out.println(1/0d); //Infinity
System.out.println(-1/0d); //-Infinity
System.out.println(0d/0d); //NaN

Чтобы подучить положительную или отрицательную бесконечность, нужно любое положительное или соответственно отрицательное число поделить на ноль. Любой из операндов должен обязательно быть типа double, тогда второй операнд также автоматически будет приведён к типу double и результатом операции будет та или иная бесконечность.

Если оба операнда окажутся целочисленными, то будет выброшено исключение java.lang.ArithmeticException: / by zero

Чтобы получит NaN можно поделить 0 на 0. Также обязательно, чтобы хотя бы один из нулей был типа double. Также NaN можно получить, если вычесть бесконечность из бесконечности:

System.out.println(1/0d - 1/0d);

Всё это также справедливо и для типа float.

Задача 4

Даны две переменные типа double, описывающие скорость: hours и kilometers. Выведете на консоль эту скорость в виде одной величины, выраженную в метрах в секунду.

Пример решения:

double kilometers = 60;
double hours = 1;

double metersPerSecond = (kilometers * 1000) / (hours * 60 * 60);

System.out.println(metersPerSecond);

Вывод программы:

16.666666666666668

  • В числителе километры умножаются на 1000, так как в километре 1000 метров. Если количество часов умножить на 60, получим минуты, ещё раз умножим на 60 — получим секунды.

  • Делим метры на секунды и сохраняем результат в специально созданную переменную.

  • Затем значение этой переменной выводим на консоль.

  • Обратите внимание и числитель и знаменатель взяты в скобки для наглядности.

Задача 5

Дано трехзначное число типа int. Округлите его до десятков. Например 345 → 340, 999 → 990 и т.д.

Последняя цифра числа — это всегда остаток от деления этого числа на 10. Например, остаток от деления 345 на 10 равен 5. Таким образом, алгоритм решения довольно прост: вычесть из числа его остаток от деления на 10. Пример решения:

int number = 345;
int result = number - number % 10;

System.out.println(result);

Выведет:

340

Для наглядности вторая строка могла бы выглядеть так:

int result = number - (number % 10);

У оператора взятия остатка такой же приоритет, как у операторов умножения и деления и соответственно он выше чем у сложения/вычитания. Поэтому скобки необязательны, но как способ сделать код более читаемым — вполне желательны.

Задача 6

Даны две переменные типа int. Используя всего одно выражения, не создавая дополнительных переменных, выведите в консоль запись "Сумма равна %d", где %d — реальная сумма значений двух переменных.

В данном случае нужно помнить, что операции с одинаковым приоритетом в Java выполняются слева направо и, что если один из операндов плюса является строкой, то и второй также будет преобразован в строку. Поэтому решение может быть таким:

int x = 5;
int y = 6;

System.out.println("Сумма равна " + (x + y));

Этот код выведет на консоль "Сумма равна 11", так как сначала будет выполнена операция в скобках. 5 плюс 6 дадут 11 и именно это число будет складываться со строкой "Сумма x + y равна ", что даст в итоге строку "Сумма x + y равна 11".

Если не использовать скобки:

int x = 5;
int y = 6;

System.out.println("Сумма равна " + x + y);

то на консоль попадёт строка "Сумма равна 56". В этом случае операции сложения буду выполнятся слева направо:

  1. Сперва выполнится "Сумма равна " + x, поскольку x равен 5, то итогом этой операции будет строка "Сумма x + y равна 5".

  2. Затем выполнится "Сумма равна 5" + y. Итогом этой операции будет "Сумма x + y равна 56".

Задача 7

Даны три переменные типа double, инициализированные произвольными значениями. Вычислите и выведите в консоль их среднее арифметическое.

Пример решения:

double x = 5;
double y = 17;
double z = 130;

double average = (x + y + z) / 3;

System.out.println(average);

При вычислении среднего важно помнить про приоритет операторов. Поскольку деление имеет более высокий приоритет чем сложение, а нам для вычислений нужно получить сумму раньше, то мы должны сумму чисел вычислить в скобках.

Задача 8

Дана переменная celsius типа double, предназначенная для хранения температуры в градусах Цельсия. Переведите данную температуру в градусы Фаренгейта и выведите результат на консоль.

Перевод градусов из шкалы Цельсия в шкалу Фаренгейта производится по формуле
x * 9 / 5 + 32

Таким образом решение может выглядеть так:

double celsius = 24;

System.out.println(celsius * 9 / 5 + 32); //Выведет 72.5

Формула настолько проста, что в соответствующем выражении не требуются скобки.

Задача 9

Дано целое число (int num), выведите в консоль сумму всех чисел от 1 до num.

Сумма чисел от 1 до n находится по известной формуле: (1 + n) * n / 2. Таким образом, решение может быть следующим:

int num = 3;

int sum = (1 + num) * num / 2;


System.out.println(sum); //Выведет 6

Задача 10

Даны переменные deposit и interest типа double, в которых хранят сумму банковского вклада и размер ставки по вкладу. Воспользовавшись формулой сложенных процентов, вычислите и выведите в консоль какой будет сумма депозита через 5 лет при ежегодной и при ежемесячной капитализации процентов.

Формула сложенного процента: deposit * (1 + interest) ^ period. Таким образом решение задачи на Java может быть следующим:

double deposit = 100_000;

double interest = 0.05;

double period = 5;


double yearCapitRes = deposit * Math.pow((1+interest), period);

double monthCapitRes = deposit * Math.pow((1+interest/12), period*12);


System.out.println("Year capitalization result: " + yearCapitRes);

System.out.println("Month capitalization result: " + monthCapitRes);

Для вычисления результата при ежемесячной капитализации годовую процентную ставку делим на 12, а количество периодов, напротив, умножаем на 12.