JSFiddle - React, Tailwind, and code Playground
HTML
<p id='pipi'></p>
<!--
http://www.mathpropress.com/stan/bibliography/spigot.pdf
http://habrahabr.ru/post/188700/
-->
JavaScript
var n=+prompt('Сколько знаков числа Пи нужно рассчитать?', 1000)+3;
var len=10*n/3|0;
var q, x, t=nines=predigit=0, a=[], pi=[];
for (var i=0; i<len; i++) a[i]=2;
for (var j=0; j<n; j++) {
q=0;
for (var i=len-1; i>=0; i--) {
x=10*a[i]+q*(i+1);
a[i]=x%(2*i+1);
q=x/(2*i+1)|0;
}
a[0]=q%10;
q=q/10|0;
if (q==9) nines++;
else if (q==10) {
w(predigit+1);
for (var i=0; i<nines; i++) w(0);
predigit=0;
nines=0;
}
else {
if (j>0) w(predigit);
predigit=q;
if (nines!=0) {
for (var i=0; i<nines; i++) w(9);
nines=0;
}
}
}
w(predigit);
document.getElementById('pipi').innerHTML=pi.join('');
function w(b) {
if (t<n-3) pi[pi.length]=b;
t++;
if (t==1) pi[pi.length]=".";
if (t%50==0 && t>0) pi[pi.length]="<br>";
}