C программирование - ломка денег - PullRequest
2 голосов
/ 27 июня 2010

Мне нужно разбить суммы на их соответствующие купюры / монеты.

Вывод выглядит примерно так:

Пока вот мой код: (Я сделал последние несколькокодирует комментарий один, потому что оттуда приходят ошибки)

  { 
  int x,y;

  printf("Enter input: ");
  scanf("%d",&x);

  y=x/1000;
  printf("\n# of $1000 bill: %d",y);
  x = x%1000;

  y=x/500;      
  printf("\n# of 4500 bill: %d",y);    
  x = (x%500);

  y=x/200;
  printf("\n#. of $200 bill: %d",y);    
  x = (x%200);

  y=x/100;
  printf("\n# of $100 bill: %d",y);    
  x = (x%100);

  y=x/50;
  printf("\n# of $50 bill: %d",y);    
  x = (x%50);

  y=x/20;
  printf("\n# of $20 bill: %d",y);    
  x = (x%20);

  y=x/10;
  printf("\n#. of $10 coin: %d",y);    
  x = (x%10);

  y=x/5;
  printf("\n#. of $5 coin: %d",y);    
  x = (x%5);

  y=x/1;
  printf("\n# of $1 coin: %d",y);    
  x = (x%1);


  getch();
  return 0;
  }

Надеюсь, вы поможете мне с этим.: /

Спасибо!

Ответы [ 2 ]

6 голосов
/ 27 июня 2010

Это простая эвристическая проблема. У вас уже есть правильная идея. Для начала, если вы хотите использовать int (и это, вероятно, хорошая идея, чтобы избежать головной боли с точностью до fp и необходимости использовать отдельный fmod), вам придется масштабировать ввод с плавающей запятой и ваш модуль по модулю. / делителей на 100. Также, чтобы сократить избыточность, рассмотрите возможность использования такой функции:

// returns number of units and subtracts unit_size * result
// from val
int units(int* val, int unit_size)
{
    int num = *val / unit_size;
    *val %= unit_size;
    return num;
}

printf("No. of P1000 bill: %d\n",units(&x, 1000 * 100) );
printf("No. of P500 bill: %d\n",units(&x, 500 * 100) );
printf("No. of P200 bill: %d\n",units(&x, 200 * 100) );
etc.

Это должно немного сократить избыточный код. Может быть, не стоит слишком увлекаться этим, и я подозреваю, что это домашнее задание. Комплексное решение:

// returns number of units and subtracts unit_size * result
// from val
int units(int* val, int unit_size)
{
    int num = *val / unit_size;
    *val %= unit_size;
    return num;
}

int main()
{
    printf("Enter input: ");

    float amount;
    scanf("%f",&amount);
    int x = (int)(amount * 100.0 + 0.5);

    printf("No. of P1000 bill: %d\n", units(&x, 1000 * 100) );
    printf("No. of P500 bill: %d\n", units(&x, 500 * 100) );
    printf("No. of P200 bill: %d\n", units(&x, 200 * 100) );
    printf("No. of P100 bill: %d\n", units(&x, 100 * 100) );
    printf("No. of P50 bill: %d\n", units(&x, 50 * 100) );
    printf("No. of P20 bill: %d\n", units(&x, 20 * 100) );
    printf("No. of P10 coin: %d\n", units(&x, 10 * 100) );
    printf("No. of P5 coin: %d\n", units(&x, 10 * 100) );
    printf("No. of P1 coin: %d\n", units(&x, 1 * 100) );
    printf("No. of 25 cents: %d\n", units(&x, 25) );
    printf("No. of 1 cent: %d\n", units(&x, 1) );

    return 0;
}

[Редактировать] Если у вас возникли проблемы с пониманием указателей, просто сделайте это так, как вы написали, не используя функцию единиц, но измените ее соответствующим образом, чтобы она читалась с плавающей точкой и умножалась на 100, как в примере выше.

[Редактировать] Запрошено:

int main()
{
    printf("Enter input: ");

    float amount;
    scanf("%f",&amount);
    int x = (int)(amount * 100.0 + 0.5); // x stores the user input in cents

    int y = x / 100000; // 1000 dollars is 100,000 cents
    printf("\nNo. of P1000 bill: %d",y);
    x = x % 100000;

    ...

    y=x / 25; // we're working with cents, so 25 = 25 cents
    printf("\nNo. of 25 cents: %d",y);    
    x = (x % 25);

    ...
}
2 голосов
/ 27 июня 2010

Отсканируйте пользовательское значение в float, затем разделите доллары и центы на два значения int.

В таком случае монеты, необходимые для значения центов, должны быть очень просты для вычисления с использованием того жеметод, который вы уже использовали (кроме деления / мода на 25 для 25 центов, 1 для 1 цента и т. д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...