Convert to and from the backwards-factorial number base
ES6, 135 108 bytes

s=&gt;s&lt;"1"?[...s].reduce((t,d,i)=&gt;+d+t*++i):eval("for(i=j=k=1;i&lt;=s;i*=++j);for(r='';k&lt;=j;k++)r+=s%i/(i/=k)|0")


Converting from backwards-factorial is nice and easy. Converting to it... not so nice. I found a 119-byte version that doesn't use eval:

s=&gt;s&lt;"1"?[...s].reduce((t,d,i)=&gt;+d+t*++i):(i=j=k=1,g=_=&gt;s&lt;i||g(i*=++j),g(),[...Array(j)].map(_=&gt;s%i/(i/=k++)|0).join``)