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

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

How to get multiresult with multicondition in Sql Server -