There are four types of common coins in   US   currency:

   quarters   (25 cents)
   dimes   (10 cents)
   nickels   (5 cents),   and 
   pennies   (1 cent) 


There are six ways to make change for 15 cents:

   A dime and a nickel 
   A dime and 5 pennies
   3 nickels
   2 nickels and 5 pennies
   A nickel and 10 pennies
   15 pennies


Task

How many ways are there to make change for a dollar using these common coins?     (1 dollar = 100 cents).



Optional

Less common are dollar coins (100 cents);   and very rare are half dollars (50 cents).   With the addition of these two coins, how many ways are there to make change for $1000?

(Note:   the answer is larger than   232).



References

 an algorithm from the book Structure and Interpretation of Computer Programs.
 an article in the algorithmist.
 Change-making problem on Wikipedia.


      DIM uscoins%(3)
      uscoins%() = 1, 5, 10, 25
      PRINT FNchange(100, uscoins%()) " ways of making $1"
      PRINT FNchange(1000, uscoins%()) " ways of making $10"
 
      DIM ukcoins%(7)
      ukcoins%() = 1, 2, 5, 10, 20, 50, 100, 200
      PRINT FNchange(100, ukcoins%()) " ways of making £1"
      PRINT FNchange(1000, ukcoins%()) " ways of making £10"
      END
 
      DEF FNchange(sum%, coins%())
      LOCAL C%, D%, I%, N%, P%, Q%, S%, table()
      C% = 0
      N% = DIM(coins%(),1) + 1
      FOR I% = 0 TO N% - 1
        D% = coins%(I%)
        IF D% <= sum% IF D% >= C% C% = D% + 1
      NEXT
      C% *= N%
      DIM table(C%-1)
      FOR I% = 0 TO N%-1 : table(I%) = 1 : NEXT
 
      P% = N%
      FOR S% = 1 TO sum%
        FOR I% = 0 TO N% - 1
          IF I% = 0 IF P% >= C% P% = 0
          IF coins%(I%) <= S% THEN
            Q% = P% - coins%(I%) * N%
            IF Q% >= 0 table(P%) = table(Q%) ELSE table(P%) = table(Q% + C%)
          ENDIF
          IF I% table(P%) += table(P% - 1)
          P% += 1
        NEXT
      NEXT
      = table(P%-1)
 