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));