Пожалуйста, помогите мне! Кажется, в моей программе на С ++ произошла ошибка. Код показывает неправильный вывод о деноминациях, учитывая как ввод целое число в песо. Напишите программу, которая будет отображать количество банкнот в 1000, 500, 100, 50, 20 и 10 песо. Выведите также оставшуюся сумму после удаления всех купюр.
И это мой программный код.
#include <iostream>
using namespace std;
int main()
{
int a;
cout << "Enter the amount: ";
cin >> a;
cout << "No. of 1000 peso bills: " << a/1000;
cout << "\nNo. of 500 peso bills: " << a%1000/500;
cout << "\nNo. of 100 peso bills: " << a%500/100;
cout << "\nNo. of 50 peso bills: " << a%100/50;
cout << "\nNo. of 20 peso bills: " << a%50/20;
cout << "\nNo. of 10 peso bills: " << a%20/10;
cout << "\n\nThe rest of the amount: " << a%10;
}
Вывод показывает:
Enter the amount: 34757
No. of 1000 peso bills: 34
No. of 500 peso bills: 1
No. of 100 peso bills: 2
No. of 50 peso bills: 1
No. of 20 peso bills: 0
No. of 10 peso bills: 1
The rest of the amount: 7
Process returned 0 (0x0) execution time : 2.156 s
Press any key to continue.
Номер 10 песо должен быть 0 вместо 1, как я могу предположить, чтобы исправить это? Заранее спасибо.
Проблема в математике. Поскольку 50 не кратно 20, вам нужно исправить расчет для 10 счетов песо:
(a%50-(a%50)/20*20)/10;
Это, конечно, только решение для этого конкретного случая. В общем, если у вас есть другие счета, все сложнее. В вашем случае вам просто повезло, потому что большинство счетов являются точным кратным все меньшие счета, где пара 50/20 является единственным исключением.
Более общее и удобочитаемое решение, вдохновленное другим ответом:
#include <iostream>
using namespace std;
int main()
{
int a;
cout << "Enter the amount: ";
cin >> a;
cout << "No. of 1000 peso bills: " << a/1000;
cout << "\nNo. of 500 peso bills: " << (a%=1000)/500;
cout << "\nNo. of 100 peso bills: " << (a%=500)/100;
cout << "\nNo. of 50 peso bills: " << (a%=100)/50;
cout << "\nNo. of 20 peso bills: " << (a%=50)/20;
cout << "\nNo. of 10 peso bills: " << (a%=20)/10;
cout << "\n\nThe rest of the amount: " << a%10;
}
Одним из способов решения проблемы является удаление суммы, которую вы уже представили, с большими счетами из общей суммы, например так:
cout << "No. of 1000 peso bills: " << a/1000;
a %= 1000;
cout << "\nNo. of 500 peso bills: " << a%1000/500;
a %= 500;
cout << "\nNo. of 100 peso bills: " << a%500/100;
a %= 100;
cout << "\nNo. of 50 peso bills: " << a%100/50;
a %= 50;
cout << "\nNo. of 20 peso bills: " << a%50/20;
a %= 20;
cout << "\nNo. of 10 peso bills: " << a%20/10;
a %= 10;
cout << "\n\nThe rest of the amount: " << a;
Это будет моделировать процесс внесения изменений, удаляя суммы, на которые вы уже предоставили большие счета, из рассмотрения, когда вы получаете меньшие счета.