Пожалуйста, посмотрите на код ниже
#include <QtCore/QCoreApplication>
#include <iostream>
int main(int argc, char *argv[])
{
using namespace std;
double purchaseAmount;
double paidAmount;
float balance;
int change, quarters, dimes, nickels, pennies, tenDollar, fiveDollar; // declare variables
cout << "Enter Total purchased amount" << endl;
cin >> purchaseAmount;
cout << "Enter Total paid amount" << endl;
cin >> paidAmount;
balance = paidAmount - purchaseAmount ;
tenDollar = balance / 10; // calculate the number of Ten Dollars
change = tenDollar % 10 ; // calculate the change needed
change = balance * 100;
quarters = change / 25; // calculate the number of quarters
change = change % 25; // calculate remaining change needed
dimes = change / 10; // calculate the number of dimes
change = change % 10; // calculate remaining change needed
nickels = change / 5; // calculate the number of nickels
pennies = change % 5; // calculate pennies
cout << "\nQuarters: " << quarters << endl; // display # of quarters
cout << " Dimes: " << dimes << endl; // display # of dimes
cout << " Nickels: " << nickels << endl; // display # of nickels
cout <<" Pennies: " << pennies << endl; // display # of pennies
cout <<" Ten dollar: " << tenDollar << endl; // display # of Ten dollar
//cout <<" Five dollar: " << fiveDollar << endl; // display # of Ten dollar
return (0);
}
То, что я пытаюсь сделать здесь, рассчитать оставшееся изменение в десять долларов, кварталы, десять центов, никели и копейки. И, например, когда я запускаю программу таким образом —
Enter Total purchased amount
9.75
Enter Total paid amount
20
Quarters: 4
Dimes: 0
Nickels: 0
Pennies: 0
Ten dollar: 1
Что не так. При этом вышеприведенный вывод неверен. Скорее должно быть
Enter Total purchased amount
9.75
Enter Total paid amount
20
Quarters: 1
Dimes: 0
Nickels: 0
Pennies: 0
Ten dollar: 1
Так что я тут делаю не так?
Спасибо
Как уже неоднократно говорилось, ошибка заключалась в мучительно повторенном коде. Учтите следующее:
int currencyCount(int& pennies, int penniesInDenomination) {
const int count = penniesInBase / penniesInDenomination;
pennies = pennies % penniesInDenomination;
return count;
}
Это может использоваться для каждой деноминации — многократно и в одну строку. Это работает, когда функция получает два значения: новое сальдо и количество для этого наименования. Эта сортировка обманывает, беря баланс по ссылке и, как «побочный эффект» вызова этой, по-видимому, автономной функции, она уменьшает баланс в соответствии с количеством возвращенных конфессий. Очевидно, вы хотели бы документировать это.
...
const int numberOfQuarters = currencyCount(balance, 25);
const int numberOfDimes = currencyCount(balance, 10);
...
Вы также можете поместить информацию о валюте (например, имя и количество копеек, которые она представляет) в вектор и зациклить его, выполнив то же самое:
typedef std::pair<std::string, int> Currency;
typedef std::vector<Currency> Currencies;
typedef Currencies::const_iterator CIter;
...
for(CIter iter = currencies.begin(); iter != currencies.end(); ++iter) {
const int quantity = currencyCount(balance, iter->second);
std::cout << iter->first << ": " << quantity << std::endl;
}
Таким образом, вы избегаете повторного кода и ошибок, которые он вызывает.
Не меняя большую часть кода, вы можете получить желаемый ответ, заменив
change = balance * 100;
с
change = ((balance) - floor(balance)) * 100;
Однако уделите больше внимания своему решению, и я гарантирую, что вы получите больше очков, чем простой обходной путь. Кроме того, не смейте нарушать соглашения, пожалуйста, разместите используя пространство имен std вне главной.
Как это:
#include <iostream>
using namespace std; // Place it here! Not inside main.
int main()
{
return 0;
}
Примечание: я сказал желаемый ответ.