Nie mam pojęcia czemu Ci wywala błąd, ale nawet nie próbuję analizować twojego kodu w JS.
Co gorsze twój kod niby w C++ jest tak pokrętny, że też go nie próbuję analizować. Niby w C++ bo ma on tyle wspólnego z C++ co kaczka z kwakaniem, [Chodzi jak kaczka, kwacze jak kaczka to napewno jest kaczka] bo gdybyś nie napisał dałbym sobie coś uciąć, że to “czysty, goły C”. 
A kod tak pokrętny, że bardziej już nie może być [pewnie może, nie doceniam inwencji]. To proste zadanie i algorytm do napisania w dowolnym języku nawet w asemblerze czy brainfucku [nie podejmuję się].
Algorytm w pseudokodzie
Należy zapoznać się z cechami podzielności: https://pl.wikipedia.org/wiki/Cecha_podzielności
W C++ najwygodniej skorzystać ze stringa:
string liczba;
while (cin >> liczba) { //dopóki jest do wczytania liczba
if (liczba == "0") return 0; // koniec
if (dzielisieprzez5(liczba) AND dzielisieprzez3(liczba)) wypisz(TAK);
else wypisz(NIE);
}
Sprawdzając [obliczając] cyfre nie korzystaj z maglcznych liczb [48], tylko w poniższy sposób:
string liczba;
pierwsza_cyfra_liczby = liczba[0] - '0'; ///i już
n_ta_cyfra_liczby = liczba[n] - '0';
itd
Używanie short jak i unsigned jeżeli nie jest uzasadnione jest niezasadne, a jeżeli nie wiesz jakiego typu użyć, użyj int.