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