Это простая эвристическая проблема. У вас уже есть правильная идея. Для начала, если вы хотите использовать 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);
...
}