raddevus
Хмм...
Я попробовал это сделать как JavaScript, чтобы открыть браузер Dev tools (F12) и запустить его в консоли:
var rez = 0; var broj = 1123583145;
while (broj > 0){
cif = broj %10;
rez = (cif & 1) ? Math.trunc(rez * 10 + cif) : rez; // uses ternary operator
console.log("rez : " + rez);
broj = broj /10;
console.log("broj : "+ broj)
}
console.log(rez);
Если вы откроете окно консоли браузера (F12 в большинстве браузеров и вставите и запустите этот код, вы увидите, что он показывает вам, как вы получаете значение.
В основном я добавлял вывод каждый раз через цикл, чтобы вы могли видеть значения broj и
rez
каждый раз.
Кроме того, вы понимаете, что строка, которую я отметил//, использует тернарный оператор?
rez = (cif & 1) ? Math.trunc(rez * 10 + cif) : rez;
Эта строка выполняет побитовую операцию над значением cif и 1.
Первый раз через cif = 5; (1123583145 % 5) // 1123583145 мод 5
так как cif = 5, то двоичное значение равно 0101
&Amp; является побитовым, и поэтому (cif & 1) будет
0101
0001
----
0001
Значение cif & 1 = 1
Поскольку значение 1 равно true то левая часть тернарного оператора завершена:
Math.trunc(rez * 10 + cif) // функция trunc заключается в том, чтобы гарантировать, что это целочисленное значение
rez * 10 = 0 // так как rez начинается с 0
0 + 5 (значение cif) означает, что rez получает значение 5
Ниже приведены первые N раз через цикл, где вы можете видеть, что происходит.
Вы можете видеть, что он берет каждую цифру начального значения и строит его.
Остальное я оставляю на ваше усмотрение.
rez : 5
broj : 112358314.5
rez : 5
broj : 11235831.45
rez : 51
broj : 1123583.145
rez : 513
broj : 112358.31450000001
rez : 513
broj : 11235.831450000001
rez : 5135
broj : 1123.583145
rez : 51353
broj : 112.3583145
rez : 51353
broj : 11.235831450000001
rez : 513531
broj : 1.123583145
rez : 5135311
broj : 0.1123583145
broj : 0.01123583145
broj : 0.0011235831450000001