JSFiddle - React, Tailwind, and code Playground
by Jack 0
JavaScript
var n="";
n=prompt("Let's test if your number belong to Fibonacci?");
if (!/^\d+$/.test(n)) {alert("Can't do non-numbers!"); process.exit();}
//var a="927372692193078999171" // should be false
//var b="8670007398507948658051921" // should be true
function addS(a,b){ //add strings as numbers;
var sum=0, ans=[];
if (a.length < b.length) b = [a, a = b][0]; // swap to make a the longer one.
a=("0"+a).split('').reverse(), b=b.split('').reverse(); //fill 0
for (var i = b.length ; i < a.length ; i++){ b[i]="0";} //fill 0
for (var i=0 ; i < b.length ; i++){
sum = a[i].charCodeAt() + b[i].charCodeAt() + sum - 96;
ans[i]=sum % 10, sum = ~~(sum/10); }
if (ans.slice(-1)[0]=="0"){ans.pop();} //remove first zero
return ans.reverse().join(''); }
function firstSmaller(a,b){ //compare strings as numbers;
if (a.length < b.length) {return true; }
if (a.length > b.length) {return false;}
for (var i=0; i < b.length ; i++){
if (a[i] < b[i]) {return true; }
if (a[i] > b[i]) {return false;}
} return false; }
function fibS(n){ ////compute Fibonacci by a string as a number;
if (firstSmaller(n,"1")) return "0";
if (firstSmaller(n,"3")) return "1";
var last1 = "1", last2 = "0", sum = "0", max=addS(n,"1");
for (var i="2"; firstSmaller( i , max ); i=addS(i,"1") ) {
sum = addS(last1,last2), last2 = last1, last1 = sum;
} return sum;
}
function isFibonacci(num){
var i = "0", j=addS(num, "1");
do{
if( fibS(i)==num ){ return true;}
i=addS(i,"1");
}while(firstSmaller(fibS(i), j));
return false;
}
alert(isFibonacci(n));