c - What's wrong with my code (CS50 2012 Pset 1 greedy) -


i trying make program gives least amount of coins change if give number other divides quarters, fails miserably. example, if input 1.25, 5 quarters if input 1.26, 5 quarters 1 nickel of course incorrect. doing wrong?

#include <stdio.h> #include <cs50.h> #include <math.h>  void calculate_change(change_requested){            int num_quarters = 0;         int num_dimes = 0;         int num_nickles = 0;         int num_pennies = 0;          int val_quarters = 25;         int val_dimes = 10;         int val_nickles = 5;          num_quarters = floor(change_requested/val_quarters);         if(change_requested % val_quarters != 0){             num_dimes = floor( (change_requested - (num_quarters * val_quarters))/val_dimes );             if( change_requested - (((num_quarters * val_quarters) + (num_dimes * val_dimes))) != 0){                 num_nickles = floor( change_requested - ( (num_quarters * val_quarters) + (num_dimes * val_dimes)/val_nickles ));                 if( change_requested - (((num_quarters * val_quarters) + (num_dimes * val_dimes) + (num_nickles * val_nickles))) != 0){                     for(int = 0; i<change_requested - (((num_quarters * val_quarters) + (num_dimes * val_dimes) + (num_nickles * val_nickles))); i++){                         num_pennies++;                     }                 }             }         }         if(num_quarters > 0){             printf("%i quarters ",num_quarters);         }         if(num_dimes > 0){             printf("%i dimes ",num_dimes);         }         if(num_nickles > 0){             printf("%i nickles",num_nickles);         }         if(num_pennies > 0){             printf("%i pennies",num_pennies);         }         printf("\n");      }  int main (void){     printf("how change need?\namount: ");     float change_requested = getfloat();     calculate_change(change_requested * 100);     return 0; } 

i feel overcomplicating this. if need write

for(int = 0; i<change_requested - (((num_quarters * val_quarters) + (num_dimes * val_dimes) + (num_nickles * val_nickles))); i++){ 

and in 1 line, wrong. can in simpler way, subtracting value of coins calculated total amount in order to obtain rest:

int vals[] = { 25, 10, 5 }; const char *names[] = { "quarters", "dimes", "nickles" };  int pennies = 100 * getfloat(); // not @ all, btw (*)  (int = 0; < 3; i++) {     int n = pennies / vals[i];      if (n) {         printf("%d %s ", n, names[i]);     }      pennies -= n * vals[i]; }  if (pennies)     printf("%d pennies", pennies);  printf("\n"); 

as why getfloat() not good: floating-point numbers aren't exact, so, example, 1.26 may represented 1.25999946. when convert integral value, may lose penny or due truncation if unlucky.


Comments

Popular posts from this blog

android - Inheriting from Theme.AppCompat* -

broadcastreceiver - android BOOT_COMPLETED not received if not activity intent-filter -

basic authentication with http post params android -