Exact Change

by Tgwizman

HTML

<input type="text" id="input" />
<input type="button" onclick="calc()" value="Calculate" />
<br/>
<div id="output"></div>

JavaScript

var input = document.getElementById('input'),
    output = document.getElementById('output');

if (location.href.split('?') &&
    location.href.split('?')[1]) {
    input.value = location.href.split('?')[1];
} else {
    input.value = Math.floor(Math.random()*100000)/100;
}

function calc() {
    change = input.value;
    
    var pennies = change * 100,
        nickels = 0,
        dimes = 0,
        quarters = 0,
        ones = 0,
        fives = 0,
        tens = 0,
        twenties = 0,
        fifties = 0,
        hundreds = 0;
    
    //nickels
    while (pennies >= 5) {
        pennies -= 5;
        nickels++;
    }
    
    //dimes
    while (nickels >= 2) {
        nickels -= 2;
        dimes++;
    }
    
    //quarters
    while (dimes >= 5) {
        dimes -= 5;
        quarters += 2;
    }
    while (dimes >= 2 && nickels >= 1) {
        dimes -= 2;
        nickels--;
        quarters++;
    }
    while (dimes >= 3) {
        dimes -= 3;
        nickels++;
        quarters++;
    }
    
    //ones
    while (quarters >= 4) {
        quarters -= 4;
        ones++;
    }
    
    //fives
    while (ones >= 5) {
        ones -= 5;
        fives++;
    }
    
    //tens
    while (fives >= 2) {
        fives -= 2;
        tens++;
    }
    
    //twenties
    while (tens >= 2) {
        tens -= 2;
        twenties++;
    }
    while (twenties >= 5) {
        twenties -= 5;
        hundreds++;
    }
    
    //fifties
    while (twenties >= 2 && tens >= 1) {
        twenties -= 2;
        tens--;
        fifties++;
    }
    
    //hundreds
    while (fifties >= 2) {
        fifties -= 2;
        hundreds++;
    }
    
    pennies = Math.round(pennies);
    
    change =
        (function(){if (hundreds == 0) {return ''} if (hundreds == 1) {return hundreds + ' hundred, '} return hundreds + ' hundreds, '})() +
        (function(){if (fifties == 0) {return ''} if (fifties == 1) {return fifties + ' fifty, '} return fifties + ' fifties, '})() +
       ...