Колличество нулей в конце факториала
Есть массив чисел, нужно найти кол-во нулей в конце факториала каждого из чисел. Сама уже не могу справиться
|
alert([1,2,3,4,5,6,7,8,9,10,11,12,13].map(el=>(fac(el)+'').split('').reverse().findIndex(el=>el!= 0))); function fac(n) { return n ? n * fac(n - 1) : 1; } |
вычислить факториал, количество нулей в конце, большие числа, разбить по три.
tghoster,
<script> function diff(max, min) { max = max.split("").reverse(); min = min.split("").reverse(); var len = Math.max(max.length, min.length), result = []; for (var i = 0, b = 0, c = 0; i <= len; i++) { b = (+max[i] || 0) + (+min[i] || 0) + c; result[i] = b > 9 ? (c = 1, b - 10) : (c = 0, b) } return result.reverse().join("").replace(/^0+/, "") } function getFactZeros(x){ var z = 0; while(x){ x = (x/5)|0; z+=x; } return z; } function sum(x, y) { var res = "0"; for (var i = 0; i < y; i++) res = diff(res, "" + x); return res } var re = /(?=\B(?:\d{3})+(?!\d+))/g; var result = "1"; var r = 225; for (var i = 1; i <= r; i++) { result = sum(result, "" + i); var n = result.replace(/.*?(0*$)/,"$1"); document.write(i + " => " + result.replace(re, " ") + " => " + n + " => " + n.length +" => " +getFactZeros(i)+ "<br><hr>") }; </script> |
j0hnik,
попробуй сократить свой код в 5 раз и получить тот же результат :) |
рони,
reg exp? |
j0hnik,
холодно |
в 5??? :blink:
|
j0hnik,
да :) ну может в 6 раз меньше |
ты умеешь заинтриговать
|
j0hnik,
если по точкам в коде считать, то вместо 5 точек будет одна. :) |
j0hnik,
это из разряда как получить сумму всех элементов восходящего ряда не суммируя каждый элемент [2,4,6,8] = 20 |
в функцию всю требуху перенести? я уж думал по количеству символов в 6 раз сократить
|
[8,2,3,61]
а с таким массивом будет работать? |
j0hnik,
в нулях факториала есть период, зная его можно сразу вычислить количество нулей |
Цитата:
|
рони, у меня 3 в школе по алгебре было, хватит издеваться =(
|
j0hnik,
осталось 4 точки поменять alert([1,2,3,4,5,6,7,8,9,10].map(el=>el....)); |
j0hnik,
ок ... главное спокойствие :thanks: alert([1,2,3,4,5,6,7,8,9,10].map(el=>el/5|0)); |
Понятно, целая честь от деления на 5
я просто этого не знал |
j0hnik,
для любого подобного ряда, сумма всех элементов a = [2,4,6,8]; alert(a.length/2 * (a.shift() + a.pop()) ); |
Рони, ок. пойду спать усваивать новые знания!
|
Цитата:
Правильное решение: function getFactZeros(x){ var z = 0; while(x){ x = (x/5)|0; z+=x; } return z; } |
SV0L0CH,
спасибо! |
Часовой пояс GMT +3, время: 14:52. |