Всем, добрый день !
Просьба объяснить для чего в строке ниже метод Math.pow(если я правильно понимаю он возвращает тип double ?), а также почему i увеличиваем на 1 именно внутри этого метода, а не за его пределами как прописано в условии.
octalNumber = (int) (octalNumber + (decimalNumber % 8) * Math.pow(10, i++));
Заранее спасибо !
zimbaby
28 уровень
Помогите прочитать строку
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #2786107
8 ноября 2021, 12:00
Добрый день. Да, Math.pow возвращает тип double. Этот метод возводит первое переданное в него число A, в степень второго переданного B. Он необходим, чтобы поставить остаток от деления в нужную позицию восьмеричного выражения. Чтобы понять, как это работает, возьмите любое число в десятичной системе и попробуйте вручную на листочке воспользоваться алгоритмом. Например, если десятичное число = 11, то:
Первая итерация, i=0.
Начальное выражение octalNumber = 0;
octalNumber = 0+(11%8=3)*(10^0=1) = 3;
Следующая строка в коде decimalNumber = 11/8 = 1;
Вторая итерация, i=1.
octalNumber = 3 + (1%8 = 1)*(10^1=10) = 13;
Итого восьмеричное представление = 013;
Касательно того, почему i++ внутри выражения: никакого скрытого смысла нет. Авторы решения выпендрились, чтобы не писать i++ в конце. Дело в том, что i++ - постинкремент. Это значит, что сначала в выражении используется число i, и только затем оно увеличится на 1. Если бы там стояло ++i, то i сначала увеличивалось бы на 1, а затем было бы использовано в выражении.
В данной ситуации так можно сделать, потому что Math.pow это единственное место в цикле, где используется i, поэтому то, что после Math.pow оно будет увеличено на 1, на дальнейший цикл никак не повлияет
+5
zimbaby
8 ноября 2021, 18:05
Спасибо !
0