JSFiddle - React, Tailwind, and code Playground

by littleguga

JavaScript

console.log(getFlags(1023));

function getFlags(sum){
  var flags = [];
  
  //if we have no sum return empty array
  if(!sum){
    return flags;
  }
  
  //check if sum is odd
  if(sum % 2 !== 0){
    //remember flag
    flags.push(1);
    
    //minus this flag from sum
    sum--;
  }
  
  //get max exponent of 2 in our sum
  var k = Math.floor(Math.log2(sum));
  while(k >= 1){
    //get max flag
    var c = Math.pow(2, k);
    
    //remember it
    flags.push(c);
    
    //minus this flag from sum
    sum = sum - c;
    
    //recount max exponent of 2 in our sum
    k = Math.floor(Math.log2(sum));
  }
  
  return flags;
}